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; 4408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams } 4508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams } 4608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 4708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams private final SparseArray<KernelID> mKIDs = new SparseArray<KernelID>(); 4808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams /** 4908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * Only to be used by generated reflected classes. 5008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams */ 51be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes protected KernelID createKernelID(int slot, int sig, Element ein, 52be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes Element eout) { 5308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams KernelID k = mKIDs.get(slot); 5408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams if (k != null) { 5508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams return k; 5608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams } 5708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 587a629fac82f88126642081b4474879f6a883e313Tim Murray long id = mRS.nScriptKernelIDCreate(getID(mRS), slot, sig); 5908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams if (id == 0) { 6008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams throw new RSDriverException("Failed to create KernelID"); 6108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams } 6208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 6308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams k = new KernelID(id, mRS, this, slot, sig); 6408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams mKIDs.put(slot, k); 6508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams return k; 6608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams } 6708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 6808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams /** 69be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni * InvokeID is an identifier for an invoke function. It is used 70be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni * as an identifier for ScriptGroup creation. 71be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni * 72be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni * This class should not be directly created. Instead use the method in the 73be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni * reflected or intrinsic code "getInvokeID_funcname()". 74be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni * 75be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni */ 76be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni public static final class InvokeID extends BaseObj { 77be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni Script mScript; 78be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni int mSlot; 79be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni InvokeID(long id, RenderScript rs, Script s, int slot) { 80be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni super(id, rs); 81be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni mScript = s; 82be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni mSlot = slot; 83be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni } 84be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni } 85be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 86be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni private final SparseArray<InvokeID> mIIDs = new SparseArray<InvokeID>(); 87be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni /** 88be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni * Only to be used by generated reflected classes. 89be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni */ 90be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni protected InvokeID createInvokeID(int slot) { 91be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni InvokeID i = mIIDs.get(slot); 92be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni if (i != null) { 93be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni return i; 94be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni } 95be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 96be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni long id = mRS.nScriptInvokeIDCreate(getID(mRS), slot); 97be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni if (id == 0) { 98be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni throw new RSDriverException("Failed to create KernelID"); 99be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni } 100be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 101be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni i = new InvokeID(id, mRS, this, slot); 102be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni mIIDs.put(slot, i); 103be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni return i; 104be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni } 105be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni 106be392ad35e29b17ed54fdbbbb8dd3e80fc1022b9Yang Ni /** 10708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * FieldID is an identifier for a Script + exported field pair. It is used 10808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * as an identifier for ScriptGroup creation. 10908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * 11008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * This class should not be directly created. Instead use the method in the 11108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * reflected or intrinsic code "getFieldID_funcname()". 11208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * 11308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams */ 11408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams public static final class FieldID extends BaseObj { 11508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams Script mScript; 11608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams int mSlot; 1177a629fac82f88126642081b4474879f6a883e313Tim Murray FieldID(long id, RenderScript rs, Script s, int slot) { 11808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams super(id, rs); 11908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams mScript = s; 12008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams mSlot = slot; 12108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams } 12208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams } 12308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 12408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams private final SparseArray<FieldID> mFIDs = new SparseArray(); 12508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams /** 12608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * Only to be used by generated reflected classes. 12708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams */ 12808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams protected FieldID createFieldID(int slot, Element e) { 12908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams FieldID f = mFIDs.get(slot); 13008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams if (f != null) { 13108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams return f; 13208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams } 13308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 1347a629fac82f88126642081b4474879f6a883e313Tim Murray long id = mRS.nScriptFieldIDCreate(getID(mRS), slot); 13508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams if (id == 0) { 13608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams throw new RSDriverException("Failed to create FieldID"); 13708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams } 13808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 13908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams f = new FieldID(id, mRS, this, slot); 14008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams mFIDs.put(slot, f); 14108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams return f; 14208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams } 14308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 14408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 1459c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 14667e3d206ca80dd97309ca63169503088cb509bdeJason Sams * Only intended for use by generated reflected code. 14767e3d206ca80dd97309ca63169503088cb509bdeJason Sams * 14867e3d206ca80dd97309ca63169503088cb509bdeJason Sams */ 1492d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams protected void invoke(int slot) { 150e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nScriptInvoke(getID(mRS), slot); 1512d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams } 1522d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams 1539c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 15467e3d206ca80dd97309ca63169503088cb509bdeJason Sams * Only intended for use by generated reflected code. 15567e3d206ca80dd97309ca63169503088cb509bdeJason Sams * 15667e3d206ca80dd97309ca63169503088cb509bdeJason Sams */ 15796ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams protected void invoke(int slot, FieldPacker v) { 15896ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams if (v != null) { 159e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nScriptInvokeV(getID(mRS), slot, v.getData()); 16096ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams } else { 161e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nScriptInvoke(getID(mRS), slot); 16296ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams } 1634d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1644d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 1659c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 1666e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams * Only intended for use by generated reflected code. 1676e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams * 1686e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams */ 169be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes protected void forEach(int slot, Allocation ain, Allocation aout, 170be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes FieldPacker v) { 171be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes forEach(slot, ain, aout, v, null); 1726e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams } 1736e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams 174f64cca905c45fcc74aacf78e6510e133385110cfJason Sams /** 175f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * Only intended for use by generated reflected code. 176f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 177f64cca905c45fcc74aacf78e6510e133385110cfJason Sams */ 178be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes protected void forEach(int slot, Allocation ain, Allocation aout, 179be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes FieldPacker v, LaunchOptions sc) { 180be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes // TODO: Is this necessary if nScriptForEach calls validate as well? 181678cc7fe9fef00fb3381e64f95cc6907796bcd8eJason Sams mRS.validate(); 182678cc7fe9fef00fb3381e64f95cc6907796bcd8eJason Sams mRS.validateObject(ain); 183678cc7fe9fef00fb3381e64f95cc6907796bcd8eJason Sams mRS.validateObject(aout); 184be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 185d1516dffa8d676fcad092d9736163829e6d0fdceJason Sams if (ain == null && aout == null && sc == null) { 186eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray throw new RSIllegalArgumentException( 187d1516dffa8d676fcad092d9736163829e6d0fdceJason Sams "At least one of input allocation, output allocation, or LaunchOptions is required to be non-null."); 188eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray } 189ba9dd06176cf833898832861114e225fdb428ea0Tim Murray 190be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes long[] in_ids = null; 191eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray if (ain != null) { 192be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_ids = mInIdsBuffer; 193be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes in_ids[0] = ain.getID(mRS); 194eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray } 195be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 1967a629fac82f88126642081b4474879f6a883e313Tim Murray long out_id = 0; 197eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray if (aout != null) { 198eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray out_id = aout.getID(mRS); 199eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray } 200be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 201eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray byte[] params = null; 202eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray if (v != null) { 203eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray params = v.getData(); 204eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray } 205be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 206be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes int[] limits = null; 207be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes if (sc != null) { 208be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limits = new int[6]; 209be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 210be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limits[0] = sc.xstart; 211be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limits[1] = sc.xend; 212be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limits[2] = sc.ystart; 213be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limits[3] = sc.yend; 214be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limits[4] = sc.zstart; 215be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limits[5] = sc.zend; 216be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } 217be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 218be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes mRS.nScriptForEach(getID(mRS), slot, in_ids, out_id, params, limits); 219eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray } 2204d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 221949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes /** 222949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes * Only intended for use by generated reflected code. 223949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes */ 224be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes protected void forEach(int slot, Allocation[] ains, Allocation aout, 225be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes FieldPacker v) { 2266a420b5e0be235d35f319118eb4920f74a61dc5eJason Sams 2276a420b5e0be235d35f319118eb4920f74a61dc5eJason Sams // FieldPacker is kept here to support regular params in the future. 228be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes forEach(slot, ains, aout, v, null); 229949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes } 230949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 231949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes /** 232949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes * Only intended for use by generated reflected code. 233949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes */ 234be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes protected void forEach(int slot, Allocation[] ains, Allocation aout, 235be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes FieldPacker v, LaunchOptions sc) { 236be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes // TODO: Is this necessary if nScriptForEach calls validate as well? 2376a420b5e0be235d35f319118eb4920f74a61dc5eJason Sams // FieldPacker is kept here to support regular params in the future. 238949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes mRS.validate(); 239c8ddcddd13bda93758295713a29fa4b924451ff6Andreas Gampe if (ains != null) { 240c8ddcddd13bda93758295713a29fa4b924451ff6Andreas Gampe for (Allocation ain : ains) { 241c8ddcddd13bda93758295713a29fa4b924451ff6Andreas Gampe mRS.validateObject(ain); 242c8ddcddd13bda93758295713a29fa4b924451ff6Andreas Gampe } 243949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes } 244c9c7daf69b32c0e72a3b99379cc5116c1647f24eStephen Hines mRS.validateObject(aout); 245be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 246949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes if (ains == null && aout == null) { 247949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes throw new RSIllegalArgumentException( 248949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes "At least one of ain or aout is required to be non-null."); 249949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes } 250949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 251ad555f91a0f95c6778a0e0f9a2a9cfd57dc00b6cAndreas Gampe long[] in_ids; 252ad555f91a0f95c6778a0e0f9a2a9cfd57dc00b6cAndreas Gampe if (ains != null) { 253ad555f91a0f95c6778a0e0f9a2a9cfd57dc00b6cAndreas Gampe in_ids = new long[ains.length]; 254ad555f91a0f95c6778a0e0f9a2a9cfd57dc00b6cAndreas Gampe for (int index = 0; index < ains.length; ++index) { 255ad555f91a0f95c6778a0e0f9a2a9cfd57dc00b6cAndreas Gampe in_ids[index] = ains[index].getID(mRS); 256ad555f91a0f95c6778a0e0f9a2a9cfd57dc00b6cAndreas Gampe } 257ad555f91a0f95c6778a0e0f9a2a9cfd57dc00b6cAndreas Gampe } else { 258ad555f91a0f95c6778a0e0f9a2a9cfd57dc00b6cAndreas Gampe in_ids = null; 259949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes } 260949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 261949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes long out_id = 0; 262949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes if (aout != null) { 263949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes out_id = aout.getID(mRS); 264949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes } 265be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 266949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes byte[] params = null; 267949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes if (v != null) { 268949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes params = v.getData(); 269949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes } 270be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 271be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes int[] limits = null; 272be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes if (sc != null) { 273be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limits = new int[6]; 274be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 275be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limits[0] = sc.xstart; 276be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limits[1] = sc.xend; 277be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limits[2] = sc.ystart; 278be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limits[3] = sc.yend; 279be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limits[4] = sc.zstart; 280be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes limits[5] = sc.zend; 281be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes } 282be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 283be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes mRS.nScriptForEach(getID(mRS), slot, in_ids, out_id, params, limits); 284949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes } 285949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes 28636eb1f74b3d19d9dbae0803f3bc271683be811ceMatt Wala /** 28726ef7a739b724452f93f850a1c268c42e439317bDavid Gross * Only intended for use by generated reflected code. (General reduction) 28826ef7a739b724452f93f850a1c268c42e439317bDavid Gross * 28926ef7a739b724452f93f850a1c268c42e439317bDavid Gross */ 29026ef7a739b724452f93f850a1c268c42e439317bDavid Gross protected void reduce(int slot, Allocation[] ains, Allocation aout, LaunchOptions sc) { 29126ef7a739b724452f93f850a1c268c42e439317bDavid Gross mRS.validate(); 29226ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (ains == null || ains.length < 1) { 29326ef7a739b724452f93f850a1c268c42e439317bDavid Gross throw new RSIllegalArgumentException( 29426ef7a739b724452f93f850a1c268c42e439317bDavid Gross "At least one input is required."); 29526ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 29626ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (aout == null) { 29726ef7a739b724452f93f850a1c268c42e439317bDavid Gross throw new RSIllegalArgumentException( 29826ef7a739b724452f93f850a1c268c42e439317bDavid Gross "aout is required to be non-null."); 29926ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 30026ef7a739b724452f93f850a1c268c42e439317bDavid Gross for (Allocation ain : ains) { 30126ef7a739b724452f93f850a1c268c42e439317bDavid Gross mRS.validateObject(ain); 30226ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 30326ef7a739b724452f93f850a1c268c42e439317bDavid Gross 30426ef7a739b724452f93f850a1c268c42e439317bDavid Gross long[] in_ids = new long[ains.length]; 30526ef7a739b724452f93f850a1c268c42e439317bDavid Gross for (int index = 0; index < ains.length; ++index) { 30626ef7a739b724452f93f850a1c268c42e439317bDavid Gross in_ids[index] = ains[index].getID(mRS); 30726ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 30826ef7a739b724452f93f850a1c268c42e439317bDavid Gross long out_id = aout.getID(mRS); 30926ef7a739b724452f93f850a1c268c42e439317bDavid Gross 31026ef7a739b724452f93f850a1c268c42e439317bDavid Gross int[] limits = null; 31126ef7a739b724452f93f850a1c268c42e439317bDavid Gross if (sc != null) { 31226ef7a739b724452f93f850a1c268c42e439317bDavid Gross limits = new int[6]; 31326ef7a739b724452f93f850a1c268c42e439317bDavid Gross 31426ef7a739b724452f93f850a1c268c42e439317bDavid Gross limits[0] = sc.xstart; 31526ef7a739b724452f93f850a1c268c42e439317bDavid Gross limits[1] = sc.xend; 31626ef7a739b724452f93f850a1c268c42e439317bDavid Gross limits[2] = sc.ystart; 31726ef7a739b724452f93f850a1c268c42e439317bDavid Gross limits[3] = sc.yend; 31826ef7a739b724452f93f850a1c268c42e439317bDavid Gross limits[4] = sc.zstart; 31926ef7a739b724452f93f850a1c268c42e439317bDavid Gross limits[5] = sc.zend; 32026ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 32126ef7a739b724452f93f850a1c268c42e439317bDavid Gross 3224a4578530a1a5fb751ea5a7bfbff83f3ab669895David Gross mRS.nScriptReduce(getID(mRS), slot, in_ids, out_id, limits); 32326ef7a739b724452f93f850a1c268c42e439317bDavid Gross } 32426ef7a739b724452f93f850a1c268c42e439317bDavid Gross 325be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes long[] mInIdsBuffer; 326be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 3277a629fac82f88126642081b4474879f6a883e313Tim Murray Script(long id, RenderScript rs) { 3280de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk super(id, rs); 329be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 330be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes mInIdsBuffer = new long[1]; 3316484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni 3326484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni /* The constructors for the derived classes (including ScriptIntrinsic 3336484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni * derived classes and ScriptC derived classes generated by Slang 3346484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni * reflection) seem to be simple enough, so we just put the guard.open() 3356484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni * call here, rather than in the end of the constructor for the derived 3366484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni * class. This, of course, assumes the derived constructor would not 3376484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni * throw any exception after calling this constructor. 3386484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni * 3396484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni * If new derived classes are added with more complicated constructors 3406484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni * that throw exceptions, this call has to be (duplicated and) moved 3416484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni * to the end of each derived class constructor. 3426484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni */ 3436484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni guard.open("destroy"); 34469f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams } 34569f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 3469c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 34767e3d206ca80dd97309ca63169503088cb509bdeJason Sams * Only intended for use by generated reflected code. 34867e3d206ca80dd97309ca63169503088cb509bdeJason Sams * 34967e3d206ca80dd97309ca63169503088cb509bdeJason Sams */ 35069f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams public void bindAllocation(Allocation va, int slot) { 351771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 352678cc7fe9fef00fb3381e64f95cc6907796bcd8eJason Sams mRS.validateObject(va); 3534d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams if (va != null) { 354be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 355be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes android.content.Context context = mRS.getApplicationContext(); 356be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 357be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes if (context.getApplicationInfo().targetSdkVersion >= 20) { 358cf9c894a9b7523cd5ec707218b89517f67caa047Jason Sams final Type t = va.mType; 359be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes if (t.hasMipmaps() || t.hasFaces() || (t.getY() != 0) || 360be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes (t.getZ() != 0)) { 361be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes 362cf9c894a9b7523cd5ec707218b89517f67caa047Jason Sams throw new RSIllegalArgumentException( 363be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes "API 20+ only allows simple 1D allocations to be " + 364be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes "used with bind."); 365cf9c894a9b7523cd5ec707218b89517f67caa047Jason Sams } 366cf9c894a9b7523cd5ec707218b89517f67caa047Jason Sams } 367e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nScriptBindAllocation(getID(mRS), va.getID(mRS), slot); 3684d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } else { 369e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nScriptBindAllocation(getID(mRS), 0, slot); 3704d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 3714d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 3724d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 3739c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 37467e3d206ca80dd97309ca63169503088cb509bdeJason Sams * Only intended for use by generated reflected code. 37567e3d206ca80dd97309ca63169503088cb509bdeJason Sams * 37667e3d206ca80dd97309ca63169503088cb509bdeJason Sams */ 3774d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public void setVar(int index, float v) { 378e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nScriptSetVarF(getID(mRS), index, v); 3794d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 3807c4caadb939b1563328251c156262c179a685c70Tim Murray public float getVarF(int index) { 3817c4caadb939b1563328251c156262c179a685c70Tim Murray return mRS.nScriptGetVarF(getID(mRS), index); 3827c4caadb939b1563328251c156262c179a685c70Tim Murray } 3834d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 3849c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 38567e3d206ca80dd97309ca63169503088cb509bdeJason Sams * Only intended for use by generated reflected code. 38667e3d206ca80dd97309ca63169503088cb509bdeJason Sams * 38767e3d206ca80dd97309ca63169503088cb509bdeJason Sams */ 388ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines public void setVar(int index, double v) { 389e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nScriptSetVarD(getID(mRS), index, v); 390ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines } 3917c4caadb939b1563328251c156262c179a685c70Tim Murray public double getVarD(int index) { 3927c4caadb939b1563328251c156262c179a685c70Tim Murray return mRS.nScriptGetVarD(getID(mRS), index); 3937c4caadb939b1563328251c156262c179a685c70Tim Murray } 394ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines 3959c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 39667e3d206ca80dd97309ca63169503088cb509bdeJason Sams * Only intended for use by generated reflected code. 39767e3d206ca80dd97309ca63169503088cb509bdeJason Sams * 39867e3d206ca80dd97309ca63169503088cb509bdeJason Sams */ 3994d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public void setVar(int index, int v) { 400e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nScriptSetVarI(getID(mRS), index, v); 4014d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 4027c4caadb939b1563328251c156262c179a685c70Tim Murray public int getVarI(int index) { 4037c4caadb939b1563328251c156262c179a685c70Tim Murray return mRS.nScriptGetVarI(getID(mRS), index); 4047c4caadb939b1563328251c156262c179a685c70Tim Murray } 4057c4caadb939b1563328251c156262c179a685c70Tim Murray 4064d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 4079c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 40867e3d206ca80dd97309ca63169503088cb509bdeJason Sams * Only intended for use by generated reflected code. 40967e3d206ca80dd97309ca63169503088cb509bdeJason Sams * 41067e3d206ca80dd97309ca63169503088cb509bdeJason Sams */ 411031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines public void setVar(int index, long v) { 412e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nScriptSetVarJ(getID(mRS), index, v); 413031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines } 4147c4caadb939b1563328251c156262c179a685c70Tim Murray public long getVarJ(int index) { 4157c4caadb939b1563328251c156262c179a685c70Tim Murray return mRS.nScriptGetVarJ(getID(mRS), index); 4167c4caadb939b1563328251c156262c179a685c70Tim Murray } 4177c4caadb939b1563328251c156262c179a685c70Tim Murray 418031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines 4199c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 42067e3d206ca80dd97309ca63169503088cb509bdeJason Sams * Only intended for use by generated reflected code. 42167e3d206ca80dd97309ca63169503088cb509bdeJason Sams * 42267e3d206ca80dd97309ca63169503088cb509bdeJason Sams */ 4230b9a22cf782ab8f837161bf3357e08471ff5b9f2Jason Sams public void setVar(int index, boolean v) { 424e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nScriptSetVarI(getID(mRS), index, v ? 1 : 0); 4250b9a22cf782ab8f837161bf3357e08471ff5b9f2Jason Sams } 4267c4caadb939b1563328251c156262c179a685c70Tim Murray public boolean getVarB(int index) { 4277c4caadb939b1563328251c156262c179a685c70Tim Murray return mRS.nScriptGetVarI(getID(mRS), index) > 0 ? true : false; 4287c4caadb939b1563328251c156262c179a685c70Tim Murray } 4290b9a22cf782ab8f837161bf3357e08471ff5b9f2Jason Sams 4309c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 43167e3d206ca80dd97309ca63169503088cb509bdeJason Sams * Only intended for use by generated reflected code. 43267e3d206ca80dd97309ca63169503088cb509bdeJason Sams * 43367e3d206ca80dd97309ca63169503088cb509bdeJason Sams */ 4346f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams public void setVar(int index, BaseObj o) { 435678cc7fe9fef00fb3381e64f95cc6907796bcd8eJason Sams mRS.validate(); 436678cc7fe9fef00fb3381e64f95cc6907796bcd8eJason Sams mRS.validateObject(o); 437e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nScriptSetVarObj(getID(mRS), index, (o == null) ? 0 : o.getID(mRS)); 4386f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams } 4396f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams 4409c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 44167e3d206ca80dd97309ca63169503088cb509bdeJason Sams * Only intended for use by generated reflected code. 44267e3d206ca80dd97309ca63169503088cb509bdeJason Sams * 44367e3d206ca80dd97309ca63169503088cb509bdeJason Sams */ 4444d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public void setVar(int index, FieldPacker v) { 445e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nScriptSetVarV(getID(mRS), index, v.getData()); 44669f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams } 44769f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 4489c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 449adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines * Only intended for use by generated reflected code. 450adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines * 451adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines */ 452adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines public void setVar(int index, FieldPacker v, Element e, int[] dims) { 453adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines mRS.nScriptSetVarVE(getID(mRS), index, v.getData(), e.getID(mRS), dims); 454adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines } 455adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines 456f64cca905c45fcc74aacf78e6510e133385110cfJason Sams /** 457f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * Only intended for use by generated reflected code. 458f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 459f64cca905c45fcc74aacf78e6510e133385110cfJason Sams */ 4607c4caadb939b1563328251c156262c179a685c70Tim Murray public void getVarV(int index, FieldPacker v) { 4617c4caadb939b1563328251c156262c179a685c70Tim Murray mRS.nScriptGetVarV(getID(mRS), index, v.getData()); 4627c4caadb939b1563328251c156262c179a685c70Tim Murray } 4637c4caadb939b1563328251c156262c179a685c70Tim Murray 46422534176fb5c1257130ef4ee589739ca42766a32Jason Sams public void setTimeZone(String timeZone) { 465771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 46622534176fb5c1257130ef4ee589739ca42766a32Jason Sams try { 467e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nScriptSetTimeZone(getID(mRS), timeZone.getBytes("UTF-8")); 46822534176fb5c1257130ef4ee589739ca42766a32Jason Sams } catch (java.io.UnsupportedEncodingException e) { 46922534176fb5c1257130ef4ee589739ca42766a32Jason Sams throw new RuntimeException(e); 47022534176fb5c1257130ef4ee589739ca42766a32Jason Sams } 47122534176fb5c1257130ef4ee589739ca42766a32Jason Sams } 47269f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 473c11e25c4e653124def1fb18e203b894f42106cbeTim Murray /** 474c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * Only intended for use by generated reflected code. 475c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * 476c11e25c4e653124def1fb18e203b894f42106cbeTim Murray */ 47769f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams public static class Builder { 47869f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams RenderScript mRS; 47969f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 48069f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams Builder(RenderScript rs) { 48169f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams mRS = rs; 482fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams } 48369f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams } 48469f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams 4852d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams 486f64cca905c45fcc74aacf78e6510e133385110cfJason Sams /** 487f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * Only intended for use by generated reflected code. 488f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 489f64cca905c45fcc74aacf78e6510e133385110cfJason Sams */ 4902d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams public static class FieldBase { 4912d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams protected Element mElement; 4922d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams protected Allocation mAllocation; 4932d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams 4942d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams protected void init(RenderScript rs, int dimx) { 495be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes mAllocation = Allocation.createSized(rs, mElement, dimx, 496be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes Allocation.USAGE_SCRIPT); 4975476b450e50939940dcf3f15c92335cee2fc572dJason Sams } 4985476b450e50939940dcf3f15c92335cee2fc572dJason Sams 4995476b450e50939940dcf3f15c92335cee2fc572dJason Sams protected void init(RenderScript rs, int dimx, int usages) { 500be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes mAllocation = 501be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes Allocation.createSized(rs, mElement, dimx, 502be7b1defb6b11920703b241ba5815fb09487bb02Chris Wailes Allocation.USAGE_SCRIPT | usages); 5032d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams } 5042d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams 5052d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams protected FieldBase() { 5062d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams } 5072d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams 5082d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams public Element getElement() { 5092d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams return mElement; 5102d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams } 5112d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams 5122d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams public Type getType() { 51331a7e42f4baa059352f0db119de38428e655eab2Jason Sams return mAllocation.getType(); 5142d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams } 5152d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams 5162d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams public Allocation getAllocation() { 5172d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams return mAllocation; 5182d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams } 5192d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams 5202d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams //@Override 5212d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams public void updateAllocation() { 5222d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams } 5232d71bc7b4c46a32cead32a35e6e137d13e8315eaJason Sams } 524fbfaa853630edfca25eaa840f92035713eef13baTim Murray 525fbfaa853630edfca25eaa840f92035713eef13baTim Murray 526f64cca905c45fcc74aacf78e6510e133385110cfJason Sams /** 5278610f837bcc70f30f0ed4a6f59b54bd1d896f305Jason Sams * Class for specifying the specifics about how a kernel will be 52853fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * launched. 5298610f837bcc70f30f0ed4a6f59b54bd1d896f305Jason Sams * 5308610f837bcc70f30f0ed4a6f59b54bd1d896f305Jason Sams * This class can specify a potential range of cells on which to 5318610f837bcc70f30f0ed4a6f59b54bd1d896f305Jason Sams * run a kernel. If no set is called for a dimension then this 5328610f837bcc70f30f0ed4a6f59b54bd1d896f305Jason Sams * class will have no impact on that dimension when the kernel 5338610f837bcc70f30f0ed4a6f59b54bd1d896f305Jason Sams * is executed. 5348610f837bcc70f30f0ed4a6f59b54bd1d896f305Jason Sams * 53553fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * The forEach kernel launch will operate over the intersection of 53653fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * the dimensions. 5378610f837bcc70f30f0ed4a6f59b54bd1d896f305Jason Sams * 5388610f837bcc70f30f0ed4a6f59b54bd1d896f305Jason Sams * Example: 5398610f837bcc70f30f0ed4a6f59b54bd1d896f305Jason Sams * LaunchOptions with setX(5, 15) 5408610f837bcc70f30f0ed4a6f59b54bd1d896f305Jason Sams * Allocation with dimension X=10, Y=10 54153fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * The resulting forEach run would execute over: 54253fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * x = 5 to 9 (inclusive) and 54353fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * y = 0 to 9 (inclusive). 5448610f837bcc70f30f0ed4a6f59b54bd1d896f305Jason Sams * 545f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 546f64cca905c45fcc74aacf78e6510e133385110cfJason Sams */ 547f64cca905c45fcc74aacf78e6510e133385110cfJason Sams public static final class LaunchOptions { 548f64cca905c45fcc74aacf78e6510e133385110cfJason Sams private int xstart = 0; 549f64cca905c45fcc74aacf78e6510e133385110cfJason Sams private int ystart = 0; 550f64cca905c45fcc74aacf78e6510e133385110cfJason Sams private int xend = 0; 551f64cca905c45fcc74aacf78e6510e133385110cfJason Sams private int yend = 0; 552f64cca905c45fcc74aacf78e6510e133385110cfJason Sams private int zstart = 0; 553f64cca905c45fcc74aacf78e6510e133385110cfJason Sams private int zend = 0; 554f64cca905c45fcc74aacf78e6510e133385110cfJason Sams private int strategy; 555f64cca905c45fcc74aacf78e6510e133385110cfJason Sams 556f64cca905c45fcc74aacf78e6510e133385110cfJason Sams /** 55753fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * Set the X range. xstartArg is the lowest coordinate of the range, 55853fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * and xendArg-1 is the highest coordinate of the range. 559f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 560f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * @param xstartArg Must be >= 0 56153fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * @param xendArg Must be > xstartArg 562f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 563f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * @return LaunchOptions 564f64cca905c45fcc74aacf78e6510e133385110cfJason Sams */ 565eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray public LaunchOptions setX(int xstartArg, int xendArg) { 566fbfaa853630edfca25eaa840f92035713eef13baTim Murray if (xstartArg < 0 || xendArg <= xstartArg) { 567fbfaa853630edfca25eaa840f92035713eef13baTim Murray throw new RSIllegalArgumentException("Invalid dimensions"); 568fbfaa853630edfca25eaa840f92035713eef13baTim Murray } 569fbfaa853630edfca25eaa840f92035713eef13baTim Murray xstart = xstartArg; 570fbfaa853630edfca25eaa840f92035713eef13baTim Murray xend = xendArg; 571eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray return this; 572fbfaa853630edfca25eaa840f92035713eef13baTim Murray } 573fbfaa853630edfca25eaa840f92035713eef13baTim Murray 574f64cca905c45fcc74aacf78e6510e133385110cfJason Sams /** 57553fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * Set the Y range. ystartArg is the lowest coordinate of the range, 57653fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * and yendArg-1 is the highest coordinate of the range. 577f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 578f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * @param ystartArg Must be >= 0 57953fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * @param yendArg Must be > ystartArg 580f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 581f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * @return LaunchOptions 582f64cca905c45fcc74aacf78e6510e133385110cfJason Sams */ 583eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray public LaunchOptions setY(int ystartArg, int yendArg) { 584fbfaa853630edfca25eaa840f92035713eef13baTim Murray if (ystartArg < 0 || yendArg <= ystartArg) { 585fbfaa853630edfca25eaa840f92035713eef13baTim Murray throw new RSIllegalArgumentException("Invalid dimensions"); 586fbfaa853630edfca25eaa840f92035713eef13baTim Murray } 587fbfaa853630edfca25eaa840f92035713eef13baTim Murray ystart = ystartArg; 588fbfaa853630edfca25eaa840f92035713eef13baTim Murray yend = yendArg; 589eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray return this; 590eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray } 591eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray 592f64cca905c45fcc74aacf78e6510e133385110cfJason Sams /** 59353fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * Set the Z range. zstartArg is the lowest coordinate of the range, 59453fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * and zendArg-1 is the highest coordinate of the range. 595f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 596f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * @param zstartArg Must be >= 0 59753fdcfbe63c1d4b2f1cbee6e72a6dd13f41dc1bcMiao Wang * @param zendArg Must be > zstartArg 598f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 599f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * @return LaunchOptions 600f64cca905c45fcc74aacf78e6510e133385110cfJason Sams */ 601eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray public LaunchOptions setZ(int zstartArg, int zendArg) { 602eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray if (zstartArg < 0 || zendArg <= zstartArg) { 603eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray throw new RSIllegalArgumentException("Invalid dimensions"); 604eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray } 605eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray zstart = zstartArg; 606eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray zend = zendArg; 607eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray return this; 608fbfaa853630edfca25eaa840f92035713eef13baTim Murray } 609fbfaa853630edfca25eaa840f92035713eef13baTim Murray 610eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray 611f64cca905c45fcc74aacf78e6510e133385110cfJason Sams /** 612f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * Returns the current X start 613f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 614f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * @return int current value 615f64cca905c45fcc74aacf78e6510e133385110cfJason Sams */ 616fbfaa853630edfca25eaa840f92035713eef13baTim Murray public int getXStart() { 617fbfaa853630edfca25eaa840f92035713eef13baTim Murray return xstart; 618fbfaa853630edfca25eaa840f92035713eef13baTim Murray } 619f64cca905c45fcc74aacf78e6510e133385110cfJason Sams /** 620f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * Returns the current X end 621f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 622f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * @return int current value 623f64cca905c45fcc74aacf78e6510e133385110cfJason Sams */ 624fbfaa853630edfca25eaa840f92035713eef13baTim Murray public int getXEnd() { 625fbfaa853630edfca25eaa840f92035713eef13baTim Murray return xend; 626fbfaa853630edfca25eaa840f92035713eef13baTim Murray } 627f64cca905c45fcc74aacf78e6510e133385110cfJason Sams /** 628f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * Returns the current Y start 629f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 630f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * @return int current value 631f64cca905c45fcc74aacf78e6510e133385110cfJason Sams */ 632fbfaa853630edfca25eaa840f92035713eef13baTim Murray public int getYStart() { 633fbfaa853630edfca25eaa840f92035713eef13baTim Murray return ystart; 634fbfaa853630edfca25eaa840f92035713eef13baTim Murray } 635f64cca905c45fcc74aacf78e6510e133385110cfJason Sams /** 636f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * Returns the current Y end 637f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 638f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * @return int current value 639f64cca905c45fcc74aacf78e6510e133385110cfJason Sams */ 640fbfaa853630edfca25eaa840f92035713eef13baTim Murray public int getYEnd() { 641fbfaa853630edfca25eaa840f92035713eef13baTim Murray return yend; 642fbfaa853630edfca25eaa840f92035713eef13baTim Murray } 643f64cca905c45fcc74aacf78e6510e133385110cfJason Sams /** 644f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * Returns the current Z start 645f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 646f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * @return int current value 647f64cca905c45fcc74aacf78e6510e133385110cfJason Sams */ 648eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray public int getZStart() { 649eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray return zstart; 650eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray } 651f64cca905c45fcc74aacf78e6510e133385110cfJason Sams /** 652f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * Returns the current Z end 653f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * 654f64cca905c45fcc74aacf78e6510e133385110cfJason Sams * @return int current value 655f64cca905c45fcc74aacf78e6510e133385110cfJason Sams */ 656eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray public int getZEnd() { 657eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray return zend; 658eb8c29cb7ece3f4b7ad18e5393b07fa7418a541cTim Murray } 659fbfaa853630edfca25eaa840f92035713eef13baTim Murray 660fbfaa853630edfca25eaa840f92035713eef13baTim Murray } 66169f0d31e576c0110c2cbbafc3b9bd46e73fc1afcJason Sams} 662