169f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams/* 2adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines * Copyright (C) 2008-2012 The Android Open Source Project 369f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams * 469f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 569f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams * you may not use this file except in compliance with the License. 669f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams * You may obtain a copy of the License at 769f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams * 869f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams * http://www.apache.org/licenses/LICENSE-2.0 969f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams * 1069f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams * Unless required by applicable law or agreed to in writing, software 1169f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 1269f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1369f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams * See the License for the specific language governing permissions and 1469f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams * limitations under the License. 1569f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams */ 1669f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 1769f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Samspackage android.renderscript; 1869f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 1908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Samsimport android.util.SparseArray; 2008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 219c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines/** 22c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * The parent class for all executable scripts. This should not be used by 23c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * applications. 2469f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams **/ 2569f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Samspublic class Script extends BaseObj { 2608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 2708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams /** 2808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * KernelID is an identifier for a Script + root function pair. It is used 2908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * as an identifier for ScriptGroup creation. 3008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * 3108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * This class should not be directly created. Instead use the method in the 3208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * reflected or intrinsic code "getKernelID_funcname()". 3308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * 3408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams */ 3508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams public static final class KernelID extends BaseObj { 3608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams Script mScript; 3708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams int mSlot; 3808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams int mSig; 397a629fac82f88126642081b4474879f6a883e313Tim Murray KernelID(long id, RenderScript rs, Script s, int slot, int sig) { 4008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams super(id, rs); 4108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams mScript = s; 4208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams mSlot = slot; 4308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams mSig = sig; 446484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni guard.open("destroy"); 4508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams } 4608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams } 4708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 4808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams private final SparseArray<KernelID> mKIDs = new SparseArray<KernelID>(); 4908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams /** 5008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * Only to be used by generated reflected classes. 5108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams */ 52be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes protected KernelID createKernelID(int slot, int sig, Element ein, 53be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes Element eout) { 5408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams KernelID k = mKIDs.get(slot); 5508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams if (k != null) { 5608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams return k; 5708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams } 5808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 597a629fac82f88126642081b4474879f6a883e313Tim Murray long id = mRS.nScriptKernelIDCreate(getID(mRS), slot, sig); 6008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams if (id == 0) { 6108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams throw new RSDriverException("Failed to create KernelID"); 6208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams } 6308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 6408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams k = new KernelID(id, mRS, this, slot, sig); 6508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams mKIDs.put(slot, k); 6608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams return k; 6708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams } 6808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 6908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams /** 70be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni * InvokeID is an identifier for an invoke function. It is used 71be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni * as an identifier for ScriptGroup creation. 72be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni * 73be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni * This class should not be directly created. Instead use the method in the 74be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni * reflected or intrinsic code "getInvokeID_funcname()". 75be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni * 76be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni */ 77be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni public static final class InvokeID extends BaseObj { 78be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni Script mScript; 79be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni int mSlot; 80be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni InvokeID(long id, RenderScript rs, Script s, int slot) { 81be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni super(id, rs); 82be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni mScript = s; 83be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni mSlot = slot; 84be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni } 85be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni } 86be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 87be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni private final SparseArray<InvokeID> mIIDs = new SparseArray<InvokeID>(); 88be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni /** 89be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni * Only to be used by generated reflected classes. 90be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni */ 91be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni protected InvokeID createInvokeID(int slot) { 92be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni InvokeID i = mIIDs.get(slot); 93be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni if (i != null) { 94be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni return i; 95be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni } 96be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 97be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni long id = mRS.nScriptInvokeIDCreate(getID(mRS), slot); 98be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni if (id == 0) { 99be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni throw new RSDriverException("Failed to create KernelID"); 100be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni } 101be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 102be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni i = new InvokeID(id, mRS, this, slot); 103be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni mIIDs.put(slot, i); 104be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni return i; 105be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni } 106be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 107be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni /** 10808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * FieldID is an identifier for a Script + exported field pair. It is used 10908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * as an identifier for ScriptGroup creation. 11008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * 11108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * This class should not be directly created. Instead use the method in the 11208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * reflected or intrinsic code "getFieldID_funcname()". 11308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * 11408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams */ 11508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams public static final class FieldID extends BaseObj { 11608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams Script mScript; 11708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams int mSlot; 1187a629fac82f88126642081b4474879f6a883e313Tim Murray FieldID(long id, RenderScript rs, Script s, int slot) { 11908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams super(id, rs); 12008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams mScript = s; 12108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams mSlot = slot; 1226484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni guard.open("destroy"); 12308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams } 12408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams } 12508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 12608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams private final SparseArray<FieldID> mFIDs = new SparseArray(); 12708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams /** 12808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * Only to be used by generated reflected classes. 12908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams */ 13008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams protected FieldID createFieldID(int slot, Element e) { 13108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams FieldID f = mFIDs.get(slot); 13208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams if (f != null) { 13308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams return f; 13408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams } 13508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 1367a629fac82f88126642081b4474879f6a883e313Tim Murray long id = mRS.nScriptFieldIDCreate(getID(mRS), slot); 13708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams if (id == 0) { 13808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams throw new RSDriverException("Failed to create FieldID"); 13908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams } 14008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 14108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams f = new FieldID(id, mRS, this, slot); 14208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams mFIDs.put(slot, f); 14308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams return f; 14408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams } 14508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 14608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 1479c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 14867e3d206ca80dd97309ca63169503088cb509bdeJason Sams * Only intended for use by generated reflected code. 14967e3d206ca80dd97309ca63169503088cb509bdeJason Sams * 15067e3d206ca80dd97309ca63169503088cb509bdeJason Sams */ 1512d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams protected void invoke(int slot) { 152e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nScriptInvoke(getID(mRS), slot); 1532d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams } 1542d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams 1559c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 15667e3d206ca80dd97309ca63169503088cb509bdeJason Sams * Only intended for use by generated reflected code. 15767e3d206ca80dd97309ca63169503088cb509bdeJason Sams * 15867e3d206ca80dd97309ca63169503088cb509bdeJason Sams */ 15996ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams protected void invoke(int slot, FieldPacker v) { 16096ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams if (v != null) { 161e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nScriptInvokeV(getID(mRS), slot, v.getData()); 16296ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams } else { 163e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nScriptInvoke(getID(mRS), slot); 16496ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams } 1654d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1664d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 1679c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 1686e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams * Only intended for use by generated reflected code. 1696e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams * 1706e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams */ 171be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes protected void forEach(int slot, Allocation ain, Allocation aout, 172be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes FieldPacker v) { 173be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes forEach(slot, ain, aout, v, null); 1746e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams } 1756e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams 176f64cca905c45fcc74aacf78e6510e133385110cfJason Sams /** 177f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * Only intended for use by generated reflected code. 178f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 179f64cca905c45fcc74aacf78e6510e133385110cfJason Sams */ 180be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes protected void forEach(int slot, Allocation ain, Allocation aout, 181be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes FieldPacker v, LaunchOptions sc) { 182be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes // TODO: Is this necessary if nScriptForEach calls validate as well? 183678cc7fe9fef00fb3381e64f95cc6907796bcd8eJason Sams mRS.validate(); 184678cc7fe9fef00fb3381e64f95cc6907796bcd8eJason Sams mRS.validateObject(ain); 185678cc7fe9fef00fb3381e64f95cc6907796bcd8eJason Sams mRS.validateObject(aout); 186be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 187d1516dffa8d676fcad092d9736163829e6d0fdceJason Sams if (ain == null && aout == null && sc == null) { 188eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray throw new RSIllegalArgumentException( 189d1516dffa8d676fcad092d9736163829e6d0fdceJason Sams "At least one of input allocation, output allocation, or LaunchOptions is required to be non-null."); 190eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray } 191ba9dd06176cf833898832861114e225fdb428ea0Tim Murray 192be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes long[] in_ids = null; 193eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray if (ain != null) { 194be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_ids = mInIdsBuffer; 195be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_ids[0] = ain.getID(mRS); 196eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray } 197be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 1987a629fac82f88126642081b4474879f6a883e313Tim Murray long out_id = 0; 199eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray if (aout != null) { 200eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray out_id = aout.getID(mRS); 201eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray } 202be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 203eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray byte[] params = null; 204eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray if (v != null) { 205eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray params = v.getData(); 206eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray } 207be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 208be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes int[] limits = null; 209be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes if (sc != null) { 210be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limits = new int[6]; 211be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 212be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limits[0] = sc.xstart; 213be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limits[1] = sc.xend; 214be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limits[2] = sc.ystart; 215be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limits[3] = sc.yend; 216be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limits[4] = sc.zstart; 217be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limits[5] = sc.zend; 218be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } 219be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 220be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes mRS.nScriptForEach(getID(mRS), slot, in_ids, out_id, params, limits); 221eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray } 2224d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 223949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes /** 224949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes * Only intended for use by generated reflected code. 225949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes */ 226be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes protected void forEach(int slot, Allocation[] ains, Allocation aout, 227be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes FieldPacker v) { 2286a420b5e0be235d35f319118eb4920f74a61dc5eJason Sams 2296a420b5e0be235d35f319118eb4920f74a61dc5eJason Sams // FieldPacker is kept here to support regular params in the future. 230be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes forEach(slot, ains, aout, v, null); 231949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes } 232949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 233949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes /** 234949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes * Only intended for use by generated reflected code. 235949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes */ 236be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes protected void forEach(int slot, Allocation[] ains, Allocation aout, 237be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes FieldPacker v, LaunchOptions sc) { 238be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes // TODO: Is this necessary if nScriptForEach calls validate as well? 2396a420b5e0be235d35f319118eb4920f74a61dc5eJason Sams // FieldPacker is kept here to support regular params in the future. 240949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes mRS.validate(); 241c8ddcddd13bda93758295713a29fa4b924451ff6Andreas Gampe if (ains != null) { 242c8ddcddd13bda93758295713a29fa4b924451ff6Andreas Gampe for (Allocation ain : ains) { 243c8ddcddd13bda93758295713a29fa4b924451ff6Andreas Gampe mRS.validateObject(ain); 244c8ddcddd13bda93758295713a29fa4b924451ff6Andreas Gampe } 245949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes } 246c9c7daf69b32c0e72a3b99379cc5116c1647f24eStephen Hines mRS.validateObject(aout); 247be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 248949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes if (ains == null && aout == null) { 249949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes throw new RSIllegalArgumentException( 250949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes "At least one of ain or aout is required to be non-null."); 251949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes } 252949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 253ad555f91a0f95c6778a0e0f9a2a9cfd57dc00b6cAndreas Gampe long[] in_ids; 254ad555f91a0f95c6778a0e0f9a2a9cfd57dc00b6cAndreas Gampe if (ains != null) { 255ad555f91a0f95c6778a0e0f9a2a9cfd57dc00b6cAndreas Gampe in_ids = new long[ains.length]; 256ad555f91a0f95c6778a0e0f9a2a9cfd57dc00b6cAndreas Gampe for (int index = 0; index < ains.length; ++index) { 257ad555f91a0f95c6778a0e0f9a2a9cfd57dc00b6cAndreas Gampe in_ids[index] = ains[index].getID(mRS); 258ad555f91a0f95c6778a0e0f9a2a9cfd57dc00b6cAndreas Gampe } 259ad555f91a0f95c6778a0e0f9a2a9cfd57dc00b6cAndreas Gampe } else { 260ad555f91a0f95c6778a0e0f9a2a9cfd57dc00b6cAndreas Gampe in_ids = null; 261949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes } 262949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 263949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes long out_id = 0; 264949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes if (aout != null) { 265949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes out_id = aout.getID(mRS); 266949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes } 267be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 268949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes byte[] params = null; 269949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes if (v != null) { 270949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes params = v.getData(); 271949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes } 272be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 273be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes int[] limits = null; 274be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes if (sc != null) { 275be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limits = new int[6]; 276be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 277be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limits[0] = sc.xstart; 278be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limits[1] = sc.xend; 279be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limits[2] = sc.ystart; 280be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limits[3] = sc.yend; 281be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limits[4] = sc.zstart; 282be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limits[5] = sc.zend; 283be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } 284be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 285be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes mRS.nScriptForEach(getID(mRS), slot, in_ids, out_id, params, limits); 286949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes } 287949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 28836eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala /** 28926ef7a739b724452f93f850a1c268c42e439317bDavid Gross * Only intended for use by generated reflected code. (General reduction) 29026ef7a739b724452f93f850a1c268c42e439317bDavid Gross * 29126ef7a739b724452f93f850a1c268c42e439317bDavid Gross */ 29226ef7a739b724452f93f850a1c268c42e439317bDavid Gross protected void reduce(int slot, Allocation[] ains, Allocation aout, LaunchOptions sc) { 29326ef7a739b724452f93f850a1c268c42e439317bDavid Gross mRS.validate(); 29426ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (ains == null || ains.length < 1) { 29526ef7a739b724452f93f850a1c268c42e439317bDavid Gross throw new RSIllegalArgumentException( 29626ef7a739b724452f93f850a1c268c42e439317bDavid Gross "At least one input is required."); 29726ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 29826ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (aout == null) { 29926ef7a739b724452f93f850a1c268c42e439317bDavid Gross throw new RSIllegalArgumentException( 30026ef7a739b724452f93f850a1c268c42e439317bDavid Gross "aout is required to be non-null."); 30126ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 30226ef7a739b724452f93f850a1c268c42e439317bDavid Gross for (Allocation ain : ains) { 30326ef7a739b724452f93f850a1c268c42e439317bDavid Gross mRS.validateObject(ain); 30426ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 30526ef7a739b724452f93f850a1c268c42e439317bDavid Gross 30626ef7a739b724452f93f850a1c268c42e439317bDavid Gross long[] in_ids = new long[ains.length]; 30726ef7a739b724452f93f850a1c268c42e439317bDavid Gross for (int index = 0; index < ains.length; ++index) { 30826ef7a739b724452f93f850a1c268c42e439317bDavid Gross in_ids[index] = ains[index].getID(mRS); 30926ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 31026ef7a739b724452f93f850a1c268c42e439317bDavid Gross long out_id = aout.getID(mRS); 31126ef7a739b724452f93f850a1c268c42e439317bDavid Gross 31226ef7a739b724452f93f850a1c268c42e439317bDavid Gross int[] limits = null; 31326ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (sc != null) { 31426ef7a739b724452f93f850a1c268c42e439317bDavid Gross limits = new int[6]; 31526ef7a739b724452f93f850a1c268c42e439317bDavid Gross 31626ef7a739b724452f93f850a1c268c42e439317bDavid Gross limits[0] = sc.xstart; 31726ef7a739b724452f93f850a1c268c42e439317bDavid Gross limits[1] = sc.xend; 31826ef7a739b724452f93f850a1c268c42e439317bDavid Gross limits[2] = sc.ystart; 31926ef7a739b724452f93f850a1c268c42e439317bDavid Gross limits[3] = sc.yend; 32026ef7a739b724452f93f850a1c268c42e439317bDavid Gross limits[4] = sc.zstart; 32126ef7a739b724452f93f850a1c268c42e439317bDavid Gross limits[5] = sc.zend; 32226ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 32326ef7a739b724452f93f850a1c268c42e439317bDavid Gross 3244a4578530a1a5fb751ea5a7bfbff83f3ab669895David Gross mRS.nScriptReduce(getID(mRS), slot, in_ids, out_id, limits); 32526ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 32626ef7a739b724452f93f850a1c268c42e439317bDavid Gross 327be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes long[] mInIdsBuffer; 328be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 3297a629fac82f88126642081b4474879f6a883e313Tim Murray Script(long id, RenderScript rs) { 3300de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk super(id, rs); 331be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 332be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes mInIdsBuffer = new long[1]; 3336484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni 3346484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni /* The constructors for the derived classes (including ScriptIntrinsic 3356484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni * derived classes and ScriptC derived classes generated by Slang 3366484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni * reflection) seem to be simple enough, so we just put the guard.open() 3376484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni * call here, rather than in the end of the constructor for the derived 3386484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni * class. This, of course, assumes the derived constructor would not 3396484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni * throw any exception after calling this constructor. 3406484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni * 3416484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni * If new derived classes are added with more complicated constructors 3426484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni * that throw exceptions, this call has to be (duplicated and) moved 3436484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni * to the end of each derived class constructor. 3446484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni */ 3456484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni guard.open("destroy"); 34669f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams } 34769f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 3489c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 34967e3d206ca80dd97309ca63169503088cb509bdeJason Sams * Only intended for use by generated reflected code. 35067e3d206ca80dd97309ca63169503088cb509bdeJason Sams * 35167e3d206ca80dd97309ca63169503088cb509bdeJason Sams */ 35269f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams public void bindAllocation(Allocation va, int slot) { 353771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 354678cc7fe9fef00fb3381e64f95cc6907796bcd8eJason Sams mRS.validateObject(va); 3554d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams if (va != null) { 356be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 357be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes android.content.Context context = mRS.getApplicationContext(); 358be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 359be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes if (context.getApplicationInfo().targetSdkVersion >= 20) { 360cf9c894a9b7523cd5ec707218b89517f67caa047Jason Sams final Type t = va.mType; 361be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes if (t.hasMipmaps() || t.hasFaces() || (t.getY() != 0) || 362be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes (t.getZ() != 0)) { 363be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 364cf9c894a9b7523cd5ec707218b89517f67caa047Jason Sams throw new RSIllegalArgumentException( 365be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes "API 20+ only allows simple 1D allocations to be " + 366be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes "used with bind."); 367cf9c894a9b7523cd5ec707218b89517f67caa047Jason Sams } 368cf9c894a9b7523cd5ec707218b89517f67caa047Jason Sams } 369e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nScriptBindAllocation(getID(mRS), va.getID(mRS), slot); 3704d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } else { 371e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nScriptBindAllocation(getID(mRS), 0, slot); 3724d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 3734d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 3744d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 3759c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 37667e3d206ca80dd97309ca63169503088cb509bdeJason Sams * Only intended for use by generated reflected code. 37767e3d206ca80dd97309ca63169503088cb509bdeJason Sams * 37867e3d206ca80dd97309ca63169503088cb509bdeJason Sams */ 3794d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public void setVar(int index, float v) { 380e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nScriptSetVarF(getID(mRS), index, v); 3814d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 3827c4caadb939b1563328251c156262c179a685c70Tim Murray public float getVarF(int index) { 3837c4caadb939b1563328251c156262c179a685c70Tim Murray return mRS.nScriptGetVarF(getID(mRS), index); 3847c4caadb939b1563328251c156262c179a685c70Tim Murray } 3854d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 3869c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 38767e3d206ca80dd97309ca63169503088cb509bdeJason Sams * Only intended for use by generated reflected code. 38867e3d206ca80dd97309ca63169503088cb509bdeJason Sams * 38967e3d206ca80dd97309ca63169503088cb509bdeJason Sams */ 390ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines public void setVar(int index, double v) { 391e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nScriptSetVarD(getID(mRS), index, v); 392ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines } 3937c4caadb939b1563328251c156262c179a685c70Tim Murray public double getVarD(int index) { 3947c4caadb939b1563328251c156262c179a685c70Tim Murray return mRS.nScriptGetVarD(getID(mRS), index); 3957c4caadb939b1563328251c156262c179a685c70Tim Murray } 396ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines 3979c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 39867e3d206ca80dd97309ca63169503088cb509bdeJason Sams * Only intended for use by generated reflected code. 39967e3d206ca80dd97309ca63169503088cb509bdeJason Sams * 40067e3d206ca80dd97309ca63169503088cb509bdeJason Sams */ 4014d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public void setVar(int index, int v) { 402e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nScriptSetVarI(getID(mRS), index, v); 4034d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 4047c4caadb939b1563328251c156262c179a685c70Tim Murray public int getVarI(int index) { 4057c4caadb939b1563328251c156262c179a685c70Tim Murray return mRS.nScriptGetVarI(getID(mRS), index); 4067c4caadb939b1563328251c156262c179a685c70Tim Murray } 4077c4caadb939b1563328251c156262c179a685c70Tim Murray 4084d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 4099c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 41067e3d206ca80dd97309ca63169503088cb509bdeJason Sams * Only intended for use by generated reflected code. 41167e3d206ca80dd97309ca63169503088cb509bdeJason Sams * 41267e3d206ca80dd97309ca63169503088cb509bdeJason Sams */ 413031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines public void setVar(int index, long v) { 414e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nScriptSetVarJ(getID(mRS), index, v); 415031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines } 4167c4caadb939b1563328251c156262c179a685c70Tim Murray public long getVarJ(int index) { 4177c4caadb939b1563328251c156262c179a685c70Tim Murray return mRS.nScriptGetVarJ(getID(mRS), index); 4187c4caadb939b1563328251c156262c179a685c70Tim Murray } 4197c4caadb939b1563328251c156262c179a685c70Tim Murray 420031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines 4219c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 42267e3d206ca80dd97309ca63169503088cb509bdeJason Sams * Only intended for use by generated reflected code. 42367e3d206ca80dd97309ca63169503088cb509bdeJason Sams * 42467e3d206ca80dd97309ca63169503088cb509bdeJason Sams */ 4250b9a22cf782ab8f837161bf3357e08471ff5b9f2Jason Sams public void setVar(int index, boolean v) { 426e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nScriptSetVarI(getID(mRS), index, v ? 1 : 0); 4270b9a22cf782ab8f837161bf3357e08471ff5b9f2Jason Sams } 4287c4caadb939b1563328251c156262c179a685c70Tim Murray public boolean getVarB(int index) { 4297c4caadb939b1563328251c156262c179a685c70Tim Murray return mRS.nScriptGetVarI(getID(mRS), index) > 0 ? true : false; 4307c4caadb939b1563328251c156262c179a685c70Tim Murray } 4310b9a22cf782ab8f837161bf3357e08471ff5b9f2Jason Sams 4329c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 43367e3d206ca80dd97309ca63169503088cb509bdeJason Sams * Only intended for use by generated reflected code. 43467e3d206ca80dd97309ca63169503088cb509bdeJason Sams * 43567e3d206ca80dd97309ca63169503088cb509bdeJason Sams */ 4366f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams public void setVar(int index, BaseObj o) { 437678cc7fe9fef00fb3381e64f95cc6907796bcd8eJason Sams mRS.validate(); 438678cc7fe9fef00fb3381e64f95cc6907796bcd8eJason Sams mRS.validateObject(o); 439e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nScriptSetVarObj(getID(mRS), index, (o == null) ? 0 : o.getID(mRS)); 4406f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams } 4416f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams 4429c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 44367e3d206ca80dd97309ca63169503088cb509bdeJason Sams * Only intended for use by generated reflected code. 44467e3d206ca80dd97309ca63169503088cb509bdeJason Sams * 44567e3d206ca80dd97309ca63169503088cb509bdeJason Sams */ 4464d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public void setVar(int index, FieldPacker v) { 447e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nScriptSetVarV(getID(mRS), index, v.getData()); 44869f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams } 44969f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 4509c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 451adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines * Only intended for use by generated reflected code. 452adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines * 453adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines */ 454adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines public void setVar(int index, FieldPacker v, Element e, int[] dims) { 455adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines mRS.nScriptSetVarVE(getID(mRS), index, v.getData(), e.getID(mRS), dims); 456adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines } 457adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines 458f64cca905c45fcc74aacf78e6510e133385110cfJason Sams /** 459f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * Only intended for use by generated reflected code. 460f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 461f64cca905c45fcc74aacf78e6510e133385110cfJason Sams */ 4627c4caadb939b1563328251c156262c179a685c70Tim Murray public void getVarV(int index, FieldPacker v) { 4637c4caadb939b1563328251c156262c179a685c70Tim Murray mRS.nScriptGetVarV(getID(mRS), index, v.getData()); 4647c4caadb939b1563328251c156262c179a685c70Tim Murray } 4657c4caadb939b1563328251c156262c179a685c70Tim Murray 46622534176fb5c1257130ef4ee589739ca42766a32Jason Sams public void setTimeZone(String timeZone) { 467771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 46822534176fb5c1257130ef4ee589739ca42766a32Jason Sams try { 469e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nScriptSetTimeZone(getID(mRS), timeZone.getBytes("UTF-8")); 47022534176fb5c1257130ef4ee589739ca42766a32Jason Sams } catch (java.io.UnsupportedEncodingException e) { 47122534176fb5c1257130ef4ee589739ca42766a32Jason Sams throw new RuntimeException(e); 47222534176fb5c1257130ef4ee589739ca42766a32Jason Sams } 47322534176fb5c1257130ef4ee589739ca42766a32Jason Sams } 47469f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 475c11e25c4e653124def1fb18e203b894f42106cbeTim Murray /** 476c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * Only intended for use by generated reflected code. 477c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * 478c11e25c4e653124def1fb18e203b894f42106cbeTim Murray */ 47969f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams public static class Builder { 48069f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams RenderScript mRS; 48169f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 48269f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams Builder(RenderScript rs) { 48369f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams mRS = rs; 484fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams } 48569f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams } 48669f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 4872d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams 488f64cca905c45fcc74aacf78e6510e133385110cfJason Sams /** 489f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * Only intended for use by generated reflected code. 490f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 491f64cca905c45fcc74aacf78e6510e133385110cfJason Sams */ 4922d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams public static class FieldBase { 4932d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams protected Element mElement; 4942d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams protected Allocation mAllocation; 4952d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams 4962d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams protected void init(RenderScript rs, int dimx) { 497be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes mAllocation = Allocation.createSized(rs, mElement, dimx, 498be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes Allocation.USAGE_SCRIPT); 4995476b450e50939940dcf3f15c92335cee2fc572dJason Sams } 5005476b450e50939940dcf3f15c92335cee2fc572dJason Sams 5015476b450e50939940dcf3f15c92335cee2fc572dJason Sams protected void init(RenderScript rs, int dimx, int usages) { 502be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes mAllocation = 503be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes Allocation.createSized(rs, mElement, dimx, 504be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes Allocation.USAGE_SCRIPT | usages); 5052d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams } 5062d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams 5072d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams protected FieldBase() { 5082d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams } 5092d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams 5102d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams public Element getElement() { 5112d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams return mElement; 5122d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams } 5132d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams 5142d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams public Type getType() { 51531a7e42f4baa059352f0db119de38428e655eab2Jason Sams return mAllocation.getType(); 5162d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams } 5172d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams 5182d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams public Allocation getAllocation() { 5192d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams return mAllocation; 5202d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams } 5212d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams 5222d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams //@Override 5232d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams public void updateAllocation() { 5242d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams } 5252d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams } 526fbfaa853630edfca25eaa840f92035713eef13baTim Murray 527fbfaa853630edfca25eaa840f92035713eef13baTim Murray 528f64cca905c45fcc74aacf78e6510e133385110cfJason Sams /** 5298610f837bcc70f30f0ed4a6f59b54bd1d896f305Jason Sams * Class for specifying the specifics about how a kernel will be 53053fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * launched. 5318610f837bcc70f30f0ed4a6f59b54bd1d896f305Jason Sams * 5328610f837bcc70f30f0ed4a6f59b54bd1d896f305Jason Sams * This class can specify a potential range of cells on which to 5338610f837bcc70f30f0ed4a6f59b54bd1d896f305Jason Sams * run a kernel. If no set is called for a dimension then this 5348610f837bcc70f30f0ed4a6f59b54bd1d896f305Jason Sams * class will have no impact on that dimension when the kernel 5358610f837bcc70f30f0ed4a6f59b54bd1d896f305Jason Sams * is executed. 5368610f837bcc70f30f0ed4a6f59b54bd1d896f305Jason Sams * 53753fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * The forEach kernel launch will operate over the intersection of 53853fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * the dimensions. 5398610f837bcc70f30f0ed4a6f59b54bd1d896f305Jason Sams * 5408610f837bcc70f30f0ed4a6f59b54bd1d896f305Jason Sams * Example: 5418610f837bcc70f30f0ed4a6f59b54bd1d896f305Jason Sams * LaunchOptions with setX(5, 15) 5428610f837bcc70f30f0ed4a6f59b54bd1d896f305Jason Sams * Allocation with dimension X=10, Y=10 54353fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * The resulting forEach run would execute over: 54453fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * x = 5 to 9 (inclusive) and 54553fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * y = 0 to 9 (inclusive). 5468610f837bcc70f30f0ed4a6f59b54bd1d896f305Jason Sams * 547f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 548f64cca905c45fcc74aacf78e6510e133385110cfJason Sams */ 549f64cca905c45fcc74aacf78e6510e133385110cfJason Sams public static final class LaunchOptions { 550f64cca905c45fcc74aacf78e6510e133385110cfJason Sams private int xstart = 0; 551f64cca905c45fcc74aacf78e6510e133385110cfJason Sams private int ystart = 0; 552f64cca905c45fcc74aacf78e6510e133385110cfJason Sams private int xend = 0; 553f64cca905c45fcc74aacf78e6510e133385110cfJason Sams private int yend = 0; 554f64cca905c45fcc74aacf78e6510e133385110cfJason Sams private int zstart = 0; 555f64cca905c45fcc74aacf78e6510e133385110cfJason Sams private int zend = 0; 556f64cca905c45fcc74aacf78e6510e133385110cfJason Sams private int strategy; 557f64cca905c45fcc74aacf78e6510e133385110cfJason Sams 558f64cca905c45fcc74aacf78e6510e133385110cfJason Sams /** 55953fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * Set the X range. xstartArg is the lowest coordinate of the range, 56053fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * and xendArg-1 is the highest coordinate of the range. 561f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 562f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * @param xstartArg Must be >= 0 56353fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * @param xendArg Must be > xstartArg 564f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 565f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * @return LaunchOptions 566f64cca905c45fcc74aacf78e6510e133385110cfJason Sams */ 567eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray public LaunchOptions setX(int xstartArg, int xendArg) { 568fbfaa853630edfca25eaa840f92035713eef13baTim Murray if (xstartArg < 0 || xendArg <= xstartArg) { 569fbfaa853630edfca25eaa840f92035713eef13baTim Murray throw new RSIllegalArgumentException("Invalid dimensions"); 570fbfaa853630edfca25eaa840f92035713eef13baTim Murray } 571fbfaa853630edfca25eaa840f92035713eef13baTim Murray xstart = xstartArg; 572fbfaa853630edfca25eaa840f92035713eef13baTim Murray xend = xendArg; 573eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray return this; 574fbfaa853630edfca25eaa840f92035713eef13baTim Murray } 575fbfaa853630edfca25eaa840f92035713eef13baTim Murray 576f64cca905c45fcc74aacf78e6510e133385110cfJason Sams /** 57753fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * Set the Y range. ystartArg is the lowest coordinate of the range, 57853fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * and yendArg-1 is the highest coordinate of the range. 579f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 580f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * @param ystartArg Must be >= 0 58153fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * @param yendArg Must be > ystartArg 582f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 583f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * @return LaunchOptions 584f64cca905c45fcc74aacf78e6510e133385110cfJason Sams */ 585eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray public LaunchOptions setY(int ystartArg, int yendArg) { 586fbfaa853630edfca25eaa840f92035713eef13baTim Murray if (ystartArg < 0 || yendArg <= ystartArg) { 587fbfaa853630edfca25eaa840f92035713eef13baTim Murray throw new RSIllegalArgumentException("Invalid dimensions"); 588fbfaa853630edfca25eaa840f92035713eef13baTim Murray } 589fbfaa853630edfca25eaa840f92035713eef13baTim Murray ystart = ystartArg; 590fbfaa853630edfca25eaa840f92035713eef13baTim Murray yend = yendArg; 591eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray return this; 592eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray } 593eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray 594f64cca905c45fcc74aacf78e6510e133385110cfJason Sams /** 59553fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * Set the Z range. zstartArg is the lowest coordinate of the range, 59653fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * and zendArg-1 is the highest coordinate of the range. 597f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 598f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * @param zstartArg Must be >= 0 59953fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * @param zendArg Must be > zstartArg 600f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 601f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * @return LaunchOptions 602f64cca905c45fcc74aacf78e6510e133385110cfJason Sams */ 603eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray public LaunchOptions setZ(int zstartArg, int zendArg) { 604eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray if (zstartArg < 0 || zendArg <= zstartArg) { 605eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray throw new RSIllegalArgumentException("Invalid dimensions"); 606eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray } 607eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray zstart = zstartArg; 608eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray zend = zendArg; 609eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray return this; 610fbfaa853630edfca25eaa840f92035713eef13baTim Murray } 611fbfaa853630edfca25eaa840f92035713eef13baTim Murray 612eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray 613f64cca905c45fcc74aacf78e6510e133385110cfJason Sams /** 614f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * Returns the current X start 615f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 616f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * @return int current value 617f64cca905c45fcc74aacf78e6510e133385110cfJason Sams */ 618fbfaa853630edfca25eaa840f92035713eef13baTim Murray public int getXStart() { 619fbfaa853630edfca25eaa840f92035713eef13baTim Murray return xstart; 620fbfaa853630edfca25eaa840f92035713eef13baTim Murray } 621f64cca905c45fcc74aacf78e6510e133385110cfJason Sams /** 622f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * Returns the current X end 623f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 624f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * @return int current value 625f64cca905c45fcc74aacf78e6510e133385110cfJason Sams */ 626fbfaa853630edfca25eaa840f92035713eef13baTim Murray public int getXEnd() { 627fbfaa853630edfca25eaa840f92035713eef13baTim Murray return xend; 628fbfaa853630edfca25eaa840f92035713eef13baTim Murray } 629f64cca905c45fcc74aacf78e6510e133385110cfJason Sams /** 630f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * Returns the current Y start 631f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 632f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * @return int current value 633f64cca905c45fcc74aacf78e6510e133385110cfJason Sams */ 634fbfaa853630edfca25eaa840f92035713eef13baTim Murray public int getYStart() { 635fbfaa853630edfca25eaa840f92035713eef13baTim Murray return ystart; 636fbfaa853630edfca25eaa840f92035713eef13baTim Murray } 637f64cca905c45fcc74aacf78e6510e133385110cfJason Sams /** 638f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * Returns the current Y end 639f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 640f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * @return int current value 641f64cca905c45fcc74aacf78e6510e133385110cfJason Sams */ 642fbfaa853630edfca25eaa840f92035713eef13baTim Murray public int getYEnd() { 643fbfaa853630edfca25eaa840f92035713eef13baTim Murray return yend; 644fbfaa853630edfca25eaa840f92035713eef13baTim Murray } 645f64cca905c45fcc74aacf78e6510e133385110cfJason Sams /** 646f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * Returns the current Z start 647f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 648f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * @return int current value 649f64cca905c45fcc74aacf78e6510e133385110cfJason Sams */ 650eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray public int getZStart() { 651eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray return zstart; 652eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray } 653f64cca905c45fcc74aacf78e6510e133385110cfJason Sams /** 654f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * Returns the current Z end 655f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 656f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * @return int current value 657f64cca905c45fcc74aacf78e6510e133385110cfJason Sams */ 658eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray public int getZEnd() { 659eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray return zend; 660eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray } 661fbfaa853630edfca25eaa840f92035713eef13baTim Murray 662fbfaa853630edfca25eaa840f92035713eef13baTim Murray } 66369f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams} 664