145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams/* 245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Copyright (C) 2012 The Android Open Source Project 345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * you may not use this file except in compliance with the License. 645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * You may obtain a copy of the License at 745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 1045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Unless required by applicable law or agreed to in writing, software 1145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 1245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * See the License for the specific language governing permissions and 1445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * limitations under the License. 1545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 1645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 1745d443665f5ce7efa934706a89883f0cc87f3513Jason Samspackage android.support.v8.renderscript; 1845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 19a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Samsimport android.util.SparseArray; 20a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 2145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams/** 22032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * The parent class for all executable scripts. This should not be used by 23032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * applications. 2445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams **/ 2545d443665f5ce7efa934706a89883f0cc87f3513Jason Samspublic class Script extends BaseObj { 26a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams /** 276f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * Determine if Incremental Intrinsic Support is needed 286f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * 296f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang */ 306f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang private boolean mUseIncSupp; 316f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang protected void setIncSupp(boolean useInc) { 326f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mUseIncSupp = useInc; 336f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 346f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang protected boolean isIncSupp() { 356f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return mUseIncSupp; 366f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 376f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang /** 386f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * An allocation for the compat context will be created when needed 396f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * e.g. foreach(ain, aout), setVar(ain); 406f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * 416f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang */ 428919a441f977cb787d244aa42cc2d4dda1cbfa11Miao Wang long getDummyAlloc(Allocation ain) { 436f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang long dInElement = 0; 446f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang long dInType = 0; 456f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang long dummyAlloc = 0; 466f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (ain != null) { 4794ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang Type inType = ain.getType(); 4894ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang dInElement = inType.getElement().getDummyElement(mRS); 4994ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang dInType = inType.getDummyType(mRS, dInElement); 5094ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang int xBytesSize = inType.getX() * inType.getElement().getBytesSize(); 5194ded3567e0f2a567887e5d8ab896634da855a2eMiao Wang dummyAlloc = mRS.nIncAllocationCreateTyped(ain.getID(mRS), dInType, xBytesSize); 526f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang ain.setIncAllocID(dummyAlloc); 536f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 546f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 556f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return dummyAlloc; 566f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 576f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang /** 58a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * KernelID is an identifier for a Script + root function pair. It is used 59a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * as an identifier for ScriptGroup creation. 60a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * 61a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * This class should not be directly created. Instead use the method in the 62a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * reflected or intrinsic code "getKernelID_funcname()". 63a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * 64a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams */ 65a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams public static final class KernelID extends BaseObj { 66baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray android.renderscript.Script.KernelID mN; 67a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams Script mScript; 68a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams int mSlot; 69a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams int mSig; 70bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang KernelID(long id, RenderScript rs, Script s, int slot, int sig) { 71a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams super(id, rs); 72a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mScript = s; 73a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mSlot = slot; 74a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mSig = sig; 75a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams } 76a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams } 77a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 78a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams private final SparseArray<KernelID> mKIDs = new SparseArray<KernelID>(); 79a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams /** 80a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * Only to be used by generated reflected classes. 81a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * 82a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * 83a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * @param slot 84a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * @param sig 85a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * @param ein 86a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * @param eout 87a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * 88a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * @return KernelID 89a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams */ 90a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams protected KernelID createKernelID(int slot, int sig, Element ein, Element eout) { 91a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams KernelID k = mKIDs.get(slot); 92a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams if (k != null) { 93a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams return k; 94a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams } 956f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 966f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang long id = mRS.nScriptKernelIDCreate(getID(mRS), slot, sig, mUseIncSupp); 97a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams if (id == 0) { 98a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams throw new RSDriverException("Failed to create KernelID"); 99a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams } 100a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 101a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams k = new KernelID(id, mRS, this, slot, sig); 102baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray 103a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mKIDs.put(slot, k); 104a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams return k; 105a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams } 106a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 107a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams /** 108086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni * InvokeID is an identifier for a invoke function. It is used 109086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni * as an identifier for ScriptGroup creation. 110086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni * 111086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni * This class should not be directly created. Instead use the method in the 112086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni * reflected or intrinsic code "getInvokeID_funcname()". 113086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni * 114086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni */ 115086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni public static final class InvokeID extends BaseObj { 116086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni Script mScript; 117086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni int mSlot; 118086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni InvokeID(long id, RenderScript rs, Script s, int slot) { 119086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni super(id, rs); 120086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni mScript = s; 121086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni mSlot = slot; 122086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni } 123086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni } 124086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni 125086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni private final SparseArray<InvokeID> mIIDs = new SparseArray<InvokeID>(); 126086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni /** 127086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni * Only to be used by generated reflected classes. 128086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni */ 129086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni protected InvokeID createInvokeID(int slot) { 130086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni InvokeID i = mIIDs.get(slot); 131086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni if (i != null) { 132086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni return i; 133086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni } 134086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni 135086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni long id = mRS.nScriptInvokeIDCreate(getID(mRS), slot); 136086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni if (id == 0) { 137086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni throw new RSDriverException("Failed to create KernelID"); 138086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni } 139086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni 140086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni i = new InvokeID(id, mRS, this, slot); 141086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni mIIDs.put(slot, i); 142086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni return i; 143086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni } 144086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni 145086010500c28e2bca57ea583d3f38da9a2f2f414Yang Ni /** 146a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * FieldID is an identifier for a Script + exported field pair. It is used 147a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * as an identifier for ScriptGroup creation. 148a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * 149a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * This class should not be directly created. Instead use the method in the 150a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * reflected or intrinsic code "getFieldID_funcname()". 151a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * 152a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams */ 153a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams public static final class FieldID extends BaseObj { 154baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray android.renderscript.Script.FieldID mN; 155a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams Script mScript; 156a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams int mSlot; 157bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang FieldID(long id, RenderScript rs, Script s, int slot) { 158a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams super(id, rs); 159a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mScript = s; 160a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mSlot = slot; 161a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams } 162a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams } 163a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 164a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams private final SparseArray<FieldID> mFIDs = new SparseArray(); 165a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams /** 166a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * Only to be used by generated reflected classes. 167a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * 168a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * @param slot 169a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * @param e 170a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * 171a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams * @return FieldID 172a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams */ 173a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams protected FieldID createFieldID(int slot, Element e) { 174a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams FieldID f = mFIDs.get(slot); 175a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams if (f != null) { 176a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams return f; 177a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams } 178a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 1796f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang long id = mRS.nScriptFieldIDCreate(getID(mRS), slot, mUseIncSupp); 180a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams if (id == 0) { 181a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams throw new RSDriverException("Failed to create FieldID"); 182a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams } 183a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 184a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams f = new FieldID(id, mRS, this, slot); 185a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams mFIDs.put(slot, f); 186a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams return f; 187a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams } 188a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 18945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 19045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Only intended for use by generated reflected code. 19145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 19245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param slot 19345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 19445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams protected void invoke(int slot) { 1956f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mRS.nScriptInvoke(getID(mRS), slot, mUseIncSupp); 19645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 19745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 19845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 19945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Only intended for use by generated reflected code. 20045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 20145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param slot 20245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param v 20345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 20445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams protected void invoke(int slot, FieldPacker v) { 20545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (v != null) { 2066f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mRS.nScriptInvokeV(getID(mRS), slot, v.getData(), mUseIncSupp); 20745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } else { 2086f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mRS.nScriptInvoke(getID(mRS), slot, mUseIncSupp); 20945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 21045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 21145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 21245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 21345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Only intended for use by generated reflected code. 21445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 215baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray * @param va 216baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray * @param slot 217baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray */ 218baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray public void bindAllocation(Allocation va, int slot) { 219baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray mRS.validate(); 220baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray if (va != null) { 2216f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mRS.nScriptBindAllocation(getID(mRS), va.getID(mRS), slot, mUseIncSupp); 222baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray } else { 2236f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mRS.nScriptBindAllocation(getID(mRS), 0, slot, mUseIncSupp); 224baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray } 225baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray } 226baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray 227baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray public void setTimeZone(String timeZone) { 228baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray mRS.validate(); 229baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray try { 2306f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mRS.nScriptSetTimeZone(getID(mRS), timeZone.getBytes("UTF-8"), mUseIncSupp); 231baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray } catch (java.io.UnsupportedEncodingException e) { 232baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray throw new RuntimeException(e); 233baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray } 234baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray } 235baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray 236baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray 237baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray /** 238baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray * Only intended for use by generated reflected code. 239baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray * 24045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param slot 24145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param ain 24245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param aout 24345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param v 24445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 24545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams protected void forEach(int slot, Allocation ain, Allocation aout, FieldPacker v) { 24645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (ain == null && aout == null) { 24745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams throw new RSIllegalArgumentException( 24845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams "At least one of ain or aout is required to be non-null."); 24945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 250bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang long in_id = 0; 2516f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang long out_id = 0; 25245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (ain != null) { 25345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams in_id = ain.getID(mRS); 25445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 25545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (aout != null) { 25645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams out_id = aout.getID(mRS); 25745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 2586f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 25945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams byte[] params = null; 26045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (v != null) { 26145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams params = v.getData(); 26245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 2636f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 2646f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseIncSupp) { 2656f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang long ainInc = getDummyAlloc(ain); 2666f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang long aoutInc = getDummyAlloc(aout); 2676f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mRS.nScriptForEach(getID(mRS), slot, ainInc, aoutInc, params, mUseIncSupp); 2686f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 2696f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mRS.nScriptForEach(getID(mRS), slot, in_id, out_id, params, mUseIncSupp); 2706f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 27145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 27245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 273032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines /** 274032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * Only intended for use by generated reflected code. 275032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * 276032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * @param slot 277032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * @param ain 278032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * @param aout 279032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * @param v 280032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * @param sc 281032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines */ 282e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray protected void forEach(int slot, Allocation ain, Allocation aout, FieldPacker v, LaunchOptions sc) { 283e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray if (ain == null && aout == null) { 284dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines throw new RSIllegalArgumentException( 285dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines "At least one of ain or aout is required to be non-null."); 286dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines } 287dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines 288dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines if (sc == null) { 289dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines forEach(slot, ain, aout, v); 290dfe51945d97812921083af3693deaa4bde6ab11fStephen Hines return; 291e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray } 292bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang long in_id = 0; 2936f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang long out_id = 0; 294e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray if (ain != null) { 295e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray in_id = ain.getID(mRS); 296e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray } 297e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray if (aout != null) { 298e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray out_id = aout.getID(mRS); 299e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray } 3006f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang 301e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray byte[] params = null; 302e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray if (v != null) { 303e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray params = v.getData(); 304e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray } 3056f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseIncSupp) { 3066f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang long ainInc = getDummyAlloc(ain); 3076f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang long aoutInc = getDummyAlloc(aout); 3086f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mRS.nScriptForEachClipped(getID(mRS), slot, ainInc, aoutInc, params, sc.xstart, sc.xend, sc.ystart, sc.yend, sc.zstart, sc.zend, mUseIncSupp); 3096f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 3106f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mRS.nScriptForEachClipped(getID(mRS), slot, in_id, out_id, params, sc.xstart, sc.xend, sc.ystart, sc.yend, sc.zstart, sc.zend, mUseIncSupp); 3116f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 312e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray } 313e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray 314bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang Script(long id, RenderScript rs) { 31545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams super(id, rs); 3166f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mUseIncSupp = false; 31745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 31845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 31945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 32045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Only intended for use by generated reflected code. 32145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 32289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang * @hide 32389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang */ 32489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang protected void forEach(int slot, Allocation[] ains, Allocation aout, 32589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang FieldPacker v) { 32689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang forEach(slot, ains, aout, v, null); 32789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 32889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 32989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang /** 33089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang * Only intended for use by generated reflected code. 33189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang * 33289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang * @hide 33389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang */ 33489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang protected void forEach(int slot, Allocation[] ains, Allocation aout, 33589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang FieldPacker v, LaunchOptions sc) { 33689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang // TODO: Is this necessary if nScriptForEach calls validate as well? 33789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang mRS.validate(); 33889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (ains != null) { 33989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang for (Allocation ain : ains) { 34089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang mRS.validateObject(ain); 34189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 34289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 34389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang mRS.validateObject(aout); 34489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 34589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (ains == null && aout == null) { 34689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang throw new RSIllegalArgumentException( 34789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang "At least one of ain or aout is required to be non-null."); 34889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 34989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 35089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang long[] in_ids; 35189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (ains != null) { 35289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang in_ids = new long[ains.length]; 35389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang for (int index = 0; index < ains.length; ++index) { 35489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang in_ids[index] = ains[index].getID(mRS); 35589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 35689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } else { 35789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang in_ids = null; 35889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 35989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 36089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang long out_id = 0; 36189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (aout != null) { 36289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang out_id = aout.getID(mRS); 36389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 36489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 36589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang byte[] params = null; 36689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (v != null) { 36789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang params = v.getData(); 36889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 36989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 37089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang int[] limits = null; 37189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang if (sc != null) { 37289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang limits = new int[6]; 37389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 37489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang limits[0] = sc.xstart; 37589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang limits[1] = sc.xend; 37689b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang limits[2] = sc.ystart; 37789b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang limits[3] = sc.yend; 37889b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang limits[4] = sc.zstart; 37989b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang limits[5] = sc.zend; 38089b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 38189b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 38289b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang mRS.nScriptForEach(getID(mRS), slot, in_ids, out_id, params, limits); 38389b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang } 38489b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang 38589b58238694d7d1eebaac0aa59b0bdd67a779582Miao Wang /** 386f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross * Only intended for use by generated reflected code. (General reduction) 387f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross * 388f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross * @hide 389f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross */ 390f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross protected void reduce(int slot, Allocation[] ains, Allocation aout, LaunchOptions sc) { 391f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross mRS.validate(); 392f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross if (ains == null || ains.length < 1) { 393f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross throw new RSIllegalArgumentException( 394f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross "At least one input is required."); 395f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross } 396f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross if (aout == null) { 397f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross throw new RSIllegalArgumentException( 398f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross "aout is required to be non-null."); 399f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross } 400f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross for (Allocation ain : ains) { 401f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross mRS.validateObject(ain); 402f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross } 403f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross 404f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross long[] in_ids = new long[ains.length]; 405f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross for (int index = 0; index < ains.length; ++index) { 406f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross in_ids[index] = ains[index].getID(mRS); 407f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross } 408f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross long out_id = aout.getID(mRS); 409f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross 410f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross int[] limits = null; 411f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross if (sc != null) { 412f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross limits = new int[6]; 413f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross 414f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross limits[0] = sc.xstart; 415f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross limits[1] = sc.xend; 416f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross limits[2] = sc.ystart; 417f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross limits[3] = sc.yend; 418f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross limits[4] = sc.zstart; 419f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross limits[5] = sc.zend; 420f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross } 421f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross 4222141e9b9d98b6f4e2f4124f9b67a7819e8d40a4cDavid Gross mRS.nScriptReduce(getID(mRS), slot, in_ids, out_id, limits); 423f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross } 424f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross 425f9e49ed8dd695fe9c7dd9b3516d613365667763aDavid Gross /** 4265154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala * Only intended for use by generated reflected code. 4275154a13fa3b65d2f4e47ceeca51f4013daa49b7aMatt Wala * 42845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param index 42945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param v 43045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 43145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void setVar(int index, float v) { 4326f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mRS.nScriptSetVarF(getID(mRS), index, v, mUseIncSupp); 43345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 43445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 43545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 43645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Only intended for use by generated reflected code. 43745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 43845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param index 43945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param v 44045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 44145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void setVar(int index, double v) { 4426f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mRS.nScriptSetVarD(getID(mRS), index, v, mUseIncSupp); 44345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 44445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 44545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 44645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Only intended for use by generated reflected code. 44745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 44845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param index 44945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param v 45045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 45145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void setVar(int index, int v) { 4526f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mRS.nScriptSetVarI(getID(mRS), index, v, mUseIncSupp); 45345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 45445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 45545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 45645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Only intended for use by generated reflected code. 45745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 45845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param index 45945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param v 46045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 46145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void setVar(int index, long v) { 46269331f9e1951415062a79181551abbfc440e6b35Miao Wang mRS.nScriptSetVarJ(getID(mRS), index, v, mUseIncSupp); 46345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 46445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 46545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 46645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Only intended for use by generated reflected code. 46745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 46845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param index 46945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param v 47045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 47145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void setVar(int index, boolean v) { 4726f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mRS.nScriptSetVarI(getID(mRS), index, v ? 1 : 0, mUseIncSupp); 47345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 47445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 47545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 47645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Only intended for use by generated reflected code. 47745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 47845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param index 47945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param o 48045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 48145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void setVar(int index, BaseObj o) { 4826f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseIncSupp) { 4836f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang long oInc = getDummyAlloc((Allocation)o); 4846f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mRS.nScriptSetVarObj(getID(mRS), index, (o == null) ? 0 : oInc, mUseIncSupp); 4856f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 4866f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mRS.nScriptSetVarObj(getID(mRS), index, (o == null) ? 0 : o.getID(mRS), mUseIncSupp); 4876f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 48845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 48945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 49045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 49145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Only intended for use by generated reflected code. 49245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 49345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param index 49445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param v 49545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 49645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void setVar(int index, FieldPacker v) { 4976f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mRS.nScriptSetVarV(getID(mRS), index, v.getData(), mUseIncSupp); 49845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 49945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 50045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 50145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Only intended for use by generated reflected code. 50245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 50345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param index 50445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param v 50545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param e 50645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param dims 50745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 50845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void setVar(int index, FieldPacker v, Element e, int[] dims) { 5096f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang if (mUseIncSupp) { 5106f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang long dElement = e.getDummyElement(mRS); 5116f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mRS.nScriptSetVarVE(getID(mRS), index, v.getData(), dElement, dims, mUseIncSupp); 5126f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } else { 5136f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang mRS.nScriptSetVarVE(getID(mRS), index, v.getData(), e.getID(mRS), dims, mUseIncSupp); 5146f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 51545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 51645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 517032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines /** 518032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * Only intended for use by generated reflected code. 519032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * 520032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines */ 52145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static class Builder { 52245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams RenderScript mRS; 52345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 52445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Builder(RenderScript rs) { 52545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mRS = rs; 52645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 52745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 52845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 52945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 530032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines /** 531032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * Only intended for use by generated reflected code. 532032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * 533032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines */ 53445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static class FieldBase { 53545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams protected Element mElement; 53645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams protected Allocation mAllocation; 53745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 53845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams protected void init(RenderScript rs, int dimx) { 53945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mAllocation = Allocation.createSized(rs, mElement, dimx, Allocation.USAGE_SCRIPT); 54045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 54145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 54245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams protected void init(RenderScript rs, int dimx, int usages) { 54345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mAllocation = Allocation.createSized(rs, mElement, dimx, Allocation.USAGE_SCRIPT | usages); 54445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 54545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 54645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams protected FieldBase() { 54745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 54845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 54945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public Element getElement() { 55045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return mElement; 55145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 55245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 55345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public Type getType() { 55445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return mAllocation.getType(); 55545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 55645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 55745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public Allocation getAllocation() { 55845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return mAllocation; 55945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 56045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 56145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams //@Override 56245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void updateAllocation() { 56345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 56445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 565e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray 566e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray 567032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines /** 56872c540a88dcb5779b7fdd33d266d49f2918a020eMiao Wang * Class for specifying the specifics about how a kernel will be 56972c540a88dcb5779b7fdd33d266d49f2918a020eMiao Wang * launched. 57072c540a88dcb5779b7fdd33d266d49f2918a020eMiao Wang * 57172c540a88dcb5779b7fdd33d266d49f2918a020eMiao Wang * This class can specify a potential range of cells on which to 57272c540a88dcb5779b7fdd33d266d49f2918a020eMiao Wang * run a kernel. If no set is called for a dimension then this 57372c540a88dcb5779b7fdd33d266d49f2918a020eMiao Wang * class will have no impact on that dimension when the kernel 57472c540a88dcb5779b7fdd33d266d49f2918a020eMiao Wang * is executed. 57572c540a88dcb5779b7fdd33d266d49f2918a020eMiao Wang * 57672c540a88dcb5779b7fdd33d266d49f2918a020eMiao Wang * The forEach kernel launch will operate over the intersection of 57772c540a88dcb5779b7fdd33d266d49f2918a020eMiao Wang * the dimensions. 57872c540a88dcb5779b7fdd33d266d49f2918a020eMiao Wang * 57972c540a88dcb5779b7fdd33d266d49f2918a020eMiao Wang * Example: 58072c540a88dcb5779b7fdd33d266d49f2918a020eMiao Wang * LaunchOptions with setX(5, 15) 58172c540a88dcb5779b7fdd33d266d49f2918a020eMiao Wang * Allocation with dimension X=10, Y=10 58272c540a88dcb5779b7fdd33d266d49f2918a020eMiao Wang * The resulting forEach run would execute over: 58372c540a88dcb5779b7fdd33d266d49f2918a020eMiao Wang * x = 5 to 9 (inclusive) and 58472c540a88dcb5779b7fdd33d266d49f2918a020eMiao Wang * y = 0 to 9 (inclusive). 585032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * 586032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines */ 587032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines public static final class LaunchOptions { 588032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines private int xstart = 0; 589032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines private int ystart = 0; 590032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines private int xend = 0; 591032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines private int yend = 0; 592032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines private int zstart = 0; 593032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines private int zend = 0; 594032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines private int strategy; 595032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines 596032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines /** 59772c540a88dcb5779b7fdd33d266d49f2918a020eMiao Wang * Set the X range. xstartArg is the lowest coordinate of the range, 59872c540a88dcb5779b7fdd33d266d49f2918a020eMiao Wang * and xendArg-1 is the highest coordinate of the range. 599032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * 600032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * @param xstartArg Must be >= 0 60172c540a88dcb5779b7fdd33d266d49f2918a020eMiao Wang * @param xendArg Must be > xstartArg 602032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * 603032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * @return LaunchOptions 604032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines */ 605e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray public LaunchOptions setX(int xstartArg, int xendArg) { 606e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray if (xstartArg < 0 || xendArg <= xstartArg) { 607e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray throw new RSIllegalArgumentException("Invalid dimensions"); 608e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray } 609e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray xstart = xstartArg; 610e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray xend = xendArg; 611e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray return this; 612e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray } 613e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray 614032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines /** 61572c540a88dcb5779b7fdd33d266d49f2918a020eMiao Wang * Set the Y range. ystartArg is the lowest coordinate of the range, 61672c540a88dcb5779b7fdd33d266d49f2918a020eMiao Wang * and yendArg-1 is the highest coordinate of the range. 617032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * 618032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * @param ystartArg Must be >= 0 61972c540a88dcb5779b7fdd33d266d49f2918a020eMiao Wang * @param yendArg Must be > ystartArg 620032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * 621032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * @return LaunchOptions 622032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines */ 623e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray public LaunchOptions setY(int ystartArg, int yendArg) { 624e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray if (ystartArg < 0 || yendArg <= ystartArg) { 625e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray throw new RSIllegalArgumentException("Invalid dimensions"); 626e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray } 627e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray ystart = ystartArg; 628e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray yend = yendArg; 629e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray return this; 630e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray } 631e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray 632032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines /** 63372c540a88dcb5779b7fdd33d266d49f2918a020eMiao Wang * Set the Z range. zstartArg is the lowest coordinate of the range, 63472c540a88dcb5779b7fdd33d266d49f2918a020eMiao Wang * and zendArg-1 is the highest coordinate of the range. 635032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * 636032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * @param zstartArg Must be >= 0 63772c540a88dcb5779b7fdd33d266d49f2918a020eMiao Wang * @param zendArg Must be > zstartArg 638032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * 639032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * @return LaunchOptions 640032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines */ 641e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray public LaunchOptions setZ(int zstartArg, int zendArg) { 642e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray if (zstartArg < 0 || zendArg <= zstartArg) { 643e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray throw new RSIllegalArgumentException("Invalid dimensions"); 644e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray } 645e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray zstart = zstartArg; 646e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray zend = zendArg; 647e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray return this; 648e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray } 649e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray 650e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray 651032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines /** 652032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * Returns the current X start 653032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * 654032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * @return int current value 655032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines */ 656e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray public int getXStart() { 657e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray return xstart; 658e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray } 659032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines /** 660032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * Returns the current X end 661032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * 662032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * @return int current value 663032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines */ 664e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray public int getXEnd() { 665e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray return xend; 666e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray } 667032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines /** 668032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * Returns the current Y start 669032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * 670032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * @return int current value 671032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines */ 672e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray public int getYStart() { 673e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray return ystart; 674e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray } 675032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines /** 676032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * Returns the current Y end 677032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * 678032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * @return int current value 679032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines */ 680e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray public int getYEnd() { 681e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray return yend; 682e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray } 683032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines /** 684032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * Returns the current Z start 685032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * 686032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * @return int current value 687032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines */ 688e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray public int getZStart() { 689e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray return zstart; 690e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray } 691032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines /** 692032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * Returns the current Z end 693032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * 694032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * @return int current value 695032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines */ 696e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray public int getZEnd() { 697e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray return zend; 698e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray } 699e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray 700e47cec65ee7148f14c32a000da1b51ff4dfc78e9Tim Murray } 70145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams} 702