136e612a488511940b61f09803b270aa1c61b68e0Jason Sams/* 2dd6c8b34f172ba699954e4d3095dba8c0fd5e930Jason Sams * Copyright (C) 2013 The Android Open Source Project 336e612a488511940b61f09803b270aa1c61b68e0Jason Sams * 436e612a488511940b61f09803b270aa1c61b68e0Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 536e612a488511940b61f09803b270aa1c61b68e0Jason Sams * you may not use this file except in compliance with the License. 636e612a488511940b61f09803b270aa1c61b68e0Jason Sams * You may obtain a copy of the License at 736e612a488511940b61f09803b270aa1c61b68e0Jason Sams * 836e612a488511940b61f09803b270aa1c61b68e0Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 936e612a488511940b61f09803b270aa1c61b68e0Jason Sams * 1036e612a488511940b61f09803b270aa1c61b68e0Jason Sams * Unless required by applicable law or agreed to in writing, software 1136e612a488511940b61f09803b270aa1c61b68e0Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 1236e612a488511940b61f09803b270aa1c61b68e0Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1336e612a488511940b61f09803b270aa1c61b68e0Jason Sams * See the License for the specific language governing permissions and 1436e612a488511940b61f09803b270aa1c61b68e0Jason Sams * limitations under the License. 1536e612a488511940b61f09803b270aa1c61b68e0Jason Sams */ 1636e612a488511940b61f09803b270aa1c61b68e0Jason Sams 1736e612a488511940b61f09803b270aa1c61b68e0Jason Samspackage android.renderscript; 1836e612a488511940b61f09803b270aa1c61b68e0Jason Sams 199c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines/** 20c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * <p>An Element represents one item within an {@link 21c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * android.renderscript.Allocation}. An Element is roughly equivalent to a C 22c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * type in a RenderScript kernel. Elements may be basic or complex. Some basic 23c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * elements are</p> <ul> <li>A single float value (equivalent to a float in a 24c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * kernel)</li> <li>A four-element float vector (equivalent to a float4 in a 25c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * kernel)</li> <li>An unsigned 32-bit integer (equivalent to an unsigned int in 26c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * a kernel)</li> <li>A single signed 8-bit integer (equivalent to a char in a 27c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * kernel)</li> </ul> <p>A complex element is roughly equivalent to a C struct 28c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * and contains a number of basic or complex Elements. From Java code, a complex 29c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * element contains a list of sub-elements and names that represents a 30c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * particular data structure. Structs used in RS scripts are available to Java 31c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * code by using the {@code ScriptField_structname} class that is reflected from 32c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * a particular script.</p> 33a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 34c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * <p>Basic Elements are comprised of a {@link 35c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * android.renderscript.Element.DataType} and a {@link 36c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * android.renderscript.Element.DataKind}. The DataType encodes C type 37c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * information of an Element, while the DataKind encodes how that Element should 38c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * be interpreted by a {@link android.renderscript.Sampler}. Note that {@link 39c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * android.renderscript.Allocation} objects with DataKind {@link 40c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * android.renderscript.Element.DataKind#USER} cannot be used as input for a 41c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * {@link android.renderscript.Sampler}. In general, {@link 42c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * android.renderscript.Allocation} objects that are intended for use with a 43c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * {@link android.renderscript.Sampler} should use bitmap-derived Elements such 44c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * as {@link android.renderscript.Element#RGBA_8888} or {@link 45c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * android.renderscript#Element.A_8}.</p> 463aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * 473aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <div class="special reference"> 483aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <h3>Developer Guides</h3> 49c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * <p>For more information about creating an application that uses RenderScript, read the 50c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * <a href="{@docRoot}guide/topics/renderscript/index.html">RenderScript</a> developer guide.</p> 513aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * </div> 5236e612a488511940b61f09803b270aa1c61b68e0Jason Sams **/ 5336e612a488511940b61f09803b270aa1c61b68e0Jason Samspublic class Element extends BaseObj { 54ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams int mSize; 55718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams Element[] mElements; 56718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams String[] mElementNames; 5770d4e5024298f71edb3b04867e05568f5495b4ceJason Sams int[] mArraySizes; 587d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk int[] mOffsetInBytes; 59ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams 603aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk int[] mVisibleElementMap; 613aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk 62718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams DataType mType; 63718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams DataKind mKind; 64718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams boolean mNormalized; 65718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams int mVectorSize; 66718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 673aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk private void updateVisibleSubElements() { 683aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk if (mElements == null) { 693aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk return; 703aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk } 713aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk 723aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk int noPaddingFieldCount = 0; 733aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk int fieldCount = mElementNames.length; 743aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk // Find out how many elements are not padding 753aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk for (int ct = 0; ct < fieldCount; ct ++) { 763aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk if (mElementNames[ct].charAt(0) != '#') { 773aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk noPaddingFieldCount ++; 783aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk } 793aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk } 803aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk mVisibleElementMap = new int[noPaddingFieldCount]; 813aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk 823aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk // Make a map that points us at non-padding elements 833aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk for (int ct = 0, ctNoPadding = 0; ct < fieldCount; ct ++) { 843aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk if (mElementNames[ct].charAt(0) != '#') { 853aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk mVisibleElementMap[ctNoPadding ++] = ct; 863aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk } 873aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk } 883aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk } 893aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk 909c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 917d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return element size in bytes 927d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 93918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk public int getBytesSize() {return mSize;} 94718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 959c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 96918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * Returns the number of vector components. 2 for float2, 4 for 97918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * float4, etc. 98fd79e02e0fec8620da7affaadcf275cf0518241aAlex Sakhartchouk * @return element vector size 99fd79e02e0fec8620da7affaadcf275cf0518241aAlex Sakhartchouk */ 100fd79e02e0fec8620da7affaadcf275cf0518241aAlex Sakhartchouk public int getVectorSize() {return mVectorSize;} 101fd79e02e0fec8620da7affaadcf275cf0518241aAlex Sakhartchouk 102a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams 1039c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 104a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * DataType represents the basic type information for a basic element. The 105f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk * naming convention follows. For numeric types it is FLOAT, 106f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk * SIGNED, or UNSIGNED followed by the _BITS where BITS is the 107f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk * size of the data. BOOLEAN is a true / false (1,0) 108f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk * represented in an 8 bit container. The UNSIGNED variants 109f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk * with multiple bit definitions are for packed graphical data 110f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk * formats and represent vectors with per vector member sizes 111f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk * which are treated as a single unit for packing and alignment 112f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk * purposes. 113a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 114a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * MATRIX the three matrix types contain FLOAT_32 elements and are treated 115a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * as 32 bits for alignment purposes. 116a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 117fb4f5cf614091f7876c6a895ad81f00b7837cd03Jason Sams * RS_* objects: opaque handles with implementation dependent 118fb4f5cf614091f7876c6a895ad81f00b7837cd03Jason Sams * sizes. 119a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 120718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams public enum DataType { 1213aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk NONE (0, 0), 122a5835a2e5fdb98fdf03a223ddf7e082ba1020807Jason Sams FLOAT_16 (1, 2), 123718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams FLOAT_32 (2, 4), 12402f41705199336f808ece50d81585450e7f8f61fStephen Hines FLOAT_64 (3, 8), 125718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams SIGNED_8 (4, 1), 126718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams SIGNED_16 (5, 2), 127718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams SIGNED_32 (6, 4), 128ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines SIGNED_64 (7, 8), 129718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams UNSIGNED_8 (8, 1), 130718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams UNSIGNED_16 (9, 2), 131718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams UNSIGNED_32 (10, 4), 13252d836332f6aae74ed97fda1b53681f36710af64Stephen Hines UNSIGNED_64 (11, 8), 133718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 134f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams BOOLEAN(12, 1), 135f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams 136f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams UNSIGNED_5_6_5 (13, 2), 137f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams UNSIGNED_5_5_5_1 (14, 2), 138f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams UNSIGNED_4_4_4_4 (15, 2), 139f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams 1401d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams MATRIX_4X4 (16, 64), 1411d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams MATRIX_3X3 (17, 36), 1421d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams MATRIX_2X2 (18, 16), 1431d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams 144b49dfeaea96375b3b8fc1921f8b891c340f0baf2Jason Sams RS_ELEMENT (1000), 145b49dfeaea96375b3b8fc1921f8b891c340f0baf2Jason Sams RS_TYPE (1001), 146b49dfeaea96375b3b8fc1921f8b891c340f0baf2Jason Sams RS_ALLOCATION (1002), 147b49dfeaea96375b3b8fc1921f8b891c340f0baf2Jason Sams RS_SAMPLER (1003), 148b49dfeaea96375b3b8fc1921f8b891c340f0baf2Jason Sams RS_SCRIPT (1004), 149b49dfeaea96375b3b8fc1921f8b891c340f0baf2Jason Sams RS_MESH (1005), 150b49dfeaea96375b3b8fc1921f8b891c340f0baf2Jason Sams RS_PROGRAM_FRAGMENT (1006), 151b49dfeaea96375b3b8fc1921f8b891c340f0baf2Jason Sams RS_PROGRAM_VERTEX (1007), 152b49dfeaea96375b3b8fc1921f8b891c340f0baf2Jason Sams RS_PROGRAM_RASTER (1008), 153b49dfeaea96375b3b8fc1921f8b891c340f0baf2Jason Sams RS_PROGRAM_STORE (1009), 154b49dfeaea96375b3b8fc1921f8b891c340f0baf2Jason Sams RS_FONT (1010); 155718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 156718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams int mID; 157718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams int mSize; 158718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams DataType(int id, int size) { 159718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mID = id; 160718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mSize = size; 161718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams } 162b49dfeaea96375b3b8fc1921f8b891c340f0baf2Jason Sams 163b49dfeaea96375b3b8fc1921f8b891c340f0baf2Jason Sams DataType(int id) { 164b49dfeaea96375b3b8fc1921f8b891c340f0baf2Jason Sams mID = id; 165b49dfeaea96375b3b8fc1921f8b891c340f0baf2Jason Sams mSize = 4; 166b49dfeaea96375b3b8fc1921f8b891c340f0baf2Jason Sams if (RenderScript.sPointerSize == 8) { 167b49dfeaea96375b3b8fc1921f8b891c340f0baf2Jason Sams mSize = 32; 168b49dfeaea96375b3b8fc1921f8b891c340f0baf2Jason Sams } 169b49dfeaea96375b3b8fc1921f8b891c340f0baf2Jason Sams } 170768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 171768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 1729c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 173a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * The special interpretation of the data if required. This is primarly 174a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * useful for graphical data. USER indicates no special interpretation is 175a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * expected. PIXEL is used in conjunction with the standard data types for 176a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * representing texture formats. 177a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 178718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams public enum DataKind { 179718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams USER (0), 180718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 181718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams PIXEL_L (7), 182718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams PIXEL_A (8), 183718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams PIXEL_LA (9), 184718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams PIXEL_RGB (10), 1858e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk PIXEL_RGBA (11), 1868140d7b0f62a6e5b54e318c959f2d501f7ee6784Jason Sams PIXEL_DEPTH (12), 1878140d7b0f62a6e5b54e318c959f2d501f7ee6784Jason Sams PIXEL_YUV(13); 188718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 189718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams int mID; 190718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams DataKind(int id) { 191718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mID = id; 192ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams } 19336e612a488511940b61f09803b270aa1c61b68e0Jason Sams } 19436e612a488511940b61f09803b270aa1c61b68e0Jason Sams 1959c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 196a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return if a element is too complex for use as a data source for a Mesh or 197a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * a Program. 198a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 199a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return boolean 200a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 201c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams public boolean isComplex() { 202c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams if (mElements == null) { 203c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams return false; 204c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams } 205c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams for (int ct=0; ct < mElements.length; ct++) { 206c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams if (mElements[ct].mElements != null) { 207c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams return true; 208c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams } 209c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams } 210c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams return false; 211c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams } 212c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams 2139c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 214918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * Elements could be simple, such as an int or a float, or a 215918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * structure with multiple sub elements, such as a collection of 216918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * floats, float2, float4. This function returns zero for simple 217918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * elements or the number of sub-elements otherwise. 2187d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return number of sub-elements in this element 2197d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 2207d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public int getSubElementCount() { 2213aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk if (mVisibleElementMap == null) { 2227d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk return 0; 2237d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 2243aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk return mVisibleElementMap.length; 2257d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 2267d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 2279c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 228918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * For complex elements, this function will return the 229918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * sub-element at index 2307d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @param index index of the sub-element to return 2317d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return sub-element in this element at given index 2327d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 2337d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public Element getSubElement(int index) { 2343aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk if (mVisibleElementMap == null) { 2357d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk throw new RSIllegalArgumentException("Element contains no sub-elements"); 2367d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 2373aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk if (index < 0 || index >= mVisibleElementMap.length) { 2387d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk throw new RSIllegalArgumentException("Illegal sub-element index"); 2397d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 2403aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk return mElements[mVisibleElementMap[index]]; 2417d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 2427d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 2439c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 244918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * For complex elements, this function will return the 245918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * sub-element name at index 2467d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @param index index of the sub-element 2477d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return sub-element in this element at given index 2487d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 2497d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public String getSubElementName(int index) { 2503aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk if (mVisibleElementMap == null) { 2517d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk throw new RSIllegalArgumentException("Element contains no sub-elements"); 2527d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 2533aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk if (index < 0 || index >= mVisibleElementMap.length) { 2547d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk throw new RSIllegalArgumentException("Illegal sub-element index"); 2557d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 2563aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk return mElementNames[mVisibleElementMap[index]]; 2577d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 2587d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 2599c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 260918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * For complex elements, some sub-elements could be statically 261918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * sized arrays. This function will return the array size for 262918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * sub-element at index 2637d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @param index index of the sub-element 2647d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return array size of sub-element in this element at given index 2657d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 2667d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public int getSubElementArraySize(int index) { 2673aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk if (mVisibleElementMap == null) { 2687d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk throw new RSIllegalArgumentException("Element contains no sub-elements"); 2697d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 2703aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk if (index < 0 || index >= mVisibleElementMap.length) { 2717d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk throw new RSIllegalArgumentException("Illegal sub-element index"); 2727d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 2733aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk return mArraySizes[mVisibleElementMap[index]]; 2747d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 2757d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 2769c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 277918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * This function specifies the location of a sub-element within 278918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * the element 2797d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @param index index of the sub-element 2807d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return offset in bytes of sub-element in this element at given index 2817d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 2827d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public int getSubElementOffsetBytes(int index) { 2833aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk if (mVisibleElementMap == null) { 2847d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk throw new RSIllegalArgumentException("Element contains no sub-elements"); 2857d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 2863aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk if (index < 0 || index >= mVisibleElementMap.length) { 2877d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk throw new RSIllegalArgumentException("Illegal sub-element index"); 2887d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 2893aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk return mOffsetInBytes[mVisibleElementMap[index]]; 2907d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 2917d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 2929c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 293f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk * @return element data type 294f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk */ 295f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk public DataType getDataType() { 296f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk return mType; 297f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk } 298f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk 2999c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 300f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk * @return element data kind 301f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk */ 302f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk public DataKind getDataKind() { 303f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk return mKind; 304f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk } 305f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk 3069c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 307a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Utility function for returning an Element containing a single Boolean. 308a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 309a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param rs Context to which the element will belong. 310a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 311a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Element 312a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 313f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams public static Element BOOLEAN(RenderScript rs) { 3146bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_BOOLEAN == null) { 3156bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 3166bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_BOOLEAN == null) { 3176bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_BOOLEAN = createUser(rs, DataType.BOOLEAN); 3186bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 3196bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 320f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams } 321f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams return rs.mElement_BOOLEAN; 322f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams } 323f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams 3249c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 325a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Utility function for returning an Element containing a single UNSIGNED_8. 326a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 327a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param rs Context to which the element will belong. 328a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 329a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Element 330a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 3318cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element U8(RenderScript rs) { 3326bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_U8 == null) { 3336bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 3346bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_U8 == null) { 3356bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_U8 = createUser(rs, DataType.UNSIGNED_8); 3366bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 3376bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 3383c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3398cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_U8; 3403c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 341ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams 3429c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 343a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Utility function for returning an Element containing a single SIGNED_8. 344a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 345a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param rs Context to which the element will belong. 346a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 347a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Element 348a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 3498cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element I8(RenderScript rs) { 3506bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_I8 == null) { 3516bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 3526bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_I8 == null) { 3536bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_I8 = createUser(rs, DataType.SIGNED_8); 3546bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 3556bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 3563c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3578cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_I8; 3583c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3593c0dfbab807a459622aeade4940daddf482dec66Jason Sams 360e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams public static Element U16(RenderScript rs) { 3616bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_U16 == null) { 3626bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 3636bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_U16 == null) { 3646bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_U16 = createUser(rs, DataType.UNSIGNED_16); 3656bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 3666bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 367e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams } 368e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams return rs.mElement_U16; 369e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams } 370e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams 371e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams public static Element I16(RenderScript rs) { 3726bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_I16 == null) { 3736bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 3746bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_I16 == null) { 3756bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_I16 = createUser(rs, DataType.SIGNED_16); 3766bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 3776bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 378e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams } 379e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams return rs.mElement_I16; 380e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams } 381e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams 3828cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element U32(RenderScript rs) { 3836bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_U32 == null) { 3846bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 3856bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_U32 == null) { 3866bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_U32 = createUser(rs, DataType.UNSIGNED_32); 3876bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 3886bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 3893c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3908cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_U32; 3913c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3923c0dfbab807a459622aeade4940daddf482dec66Jason Sams 3938cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element I32(RenderScript rs) { 3946bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_I32 == null) { 3956bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 3966bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_I32 == null) { 3976bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_I32 = createUser(rs, DataType.SIGNED_32); 3986bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 3996bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 4003c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 4018cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_I32; 4023c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 4033c0dfbab807a459622aeade4940daddf482dec66Jason Sams 40452d836332f6aae74ed97fda1b53681f36710af64Stephen Hines public static Element U64(RenderScript rs) { 4056bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_U64 == null) { 4066bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 4076bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_U64 == null) { 4086bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_U64 = createUser(rs, DataType.UNSIGNED_64); 4096bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 4106bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 41152d836332f6aae74ed97fda1b53681f36710af64Stephen Hines } 41252d836332f6aae74ed97fda1b53681f36710af64Stephen Hines return rs.mElement_U64; 41352d836332f6aae74ed97fda1b53681f36710af64Stephen Hines } 41452d836332f6aae74ed97fda1b53681f36710af64Stephen Hines 415ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines public static Element I64(RenderScript rs) { 4166bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_I64 == null) { 4176bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 4186bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_I64 == null) { 4196bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_I64 = createUser(rs, DataType.SIGNED_64); 4206bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 4216bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 422ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines } 423ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines return rs.mElement_I64; 424ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines } 425ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines 426a5835a2e5fdb98fdf03a223ddf7e082ba1020807Jason Sams public static Element F16(RenderScript rs) { 4276bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_F16 == null) { 4286bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 4296bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_F16 == null) { 4306bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_F16 = createUser(rs, DataType.FLOAT_16); 4316bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 4326bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 433a5835a2e5fdb98fdf03a223ddf7e082ba1020807Jason Sams } 434a5835a2e5fdb98fdf03a223ddf7e082ba1020807Jason Sams return rs.mElement_F16; 435a5835a2e5fdb98fdf03a223ddf7e082ba1020807Jason Sams } 436a5835a2e5fdb98fdf03a223ddf7e082ba1020807Jason Sams 4378cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element F32(RenderScript rs) { 4386bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_F32 == null) { 4396bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 4406bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_F32 == null) { 4416bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_F32 = createUser(rs, DataType.FLOAT_32); 4426bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 4436bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 4443c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 4458cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_F32; 4463c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 4473c0dfbab807a459622aeade4940daddf482dec66Jason Sams 44802f41705199336f808ece50d81585450e7f8f61fStephen Hines public static Element F64(RenderScript rs) { 4496bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_F64 == null) { 4506bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 4516bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_F64 == null) { 4526bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_F64 = createUser(rs, DataType.FLOAT_64); 4536bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 4546bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 45502f41705199336f808ece50d81585450e7f8f61fStephen Hines } 45602f41705199336f808ece50d81585450e7f8f61fStephen Hines return rs.mElement_F64; 45702f41705199336f808ece50d81585450e7f8f61fStephen Hines } 45802f41705199336f808ece50d81585450e7f8f61fStephen Hines 4598cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element ELEMENT(RenderScript rs) { 4606bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_ELEMENT == null) { 4616bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 4626bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_ELEMENT == null) { 4636bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_ELEMENT = createUser(rs, DataType.RS_ELEMENT); 4646bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 4656bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 466a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 4678cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_ELEMENT; 468a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 469a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 4708cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element TYPE(RenderScript rs) { 4716bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_TYPE == null) { 4726bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 4736bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_TYPE == null) { 4746bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_TYPE = createUser(rs, DataType.RS_TYPE); 4756bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 4766bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 477a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 4788cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_TYPE; 479a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 480a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 4818cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element ALLOCATION(RenderScript rs) { 4826bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_ALLOCATION == null) { 4836bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 4846bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_ALLOCATION == null) { 4856bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_ALLOCATION = createUser(rs, DataType.RS_ALLOCATION); 4866bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 4876bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 488a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 4898cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_ALLOCATION; 490a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 491a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 4928cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element SAMPLER(RenderScript rs) { 4936bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_SAMPLER == null) { 4946bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 4956bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_SAMPLER == null) { 4966bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_SAMPLER = createUser(rs, DataType.RS_SAMPLER); 4976bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 4986bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 499a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 5008cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_SAMPLER; 501a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 502a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 5038cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element SCRIPT(RenderScript rs) { 5046bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_SCRIPT == null) { 5056bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 5066bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_SCRIPT == null) { 5076bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_SCRIPT = createUser(rs, DataType.RS_SCRIPT); 5086bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 5096bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 510a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 5118cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_SCRIPT; 512a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 513a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 5148cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element MESH(RenderScript rs) { 5156bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_MESH == null) { 5166bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 5176bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_MESH == null) { 5186bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_MESH = createUser(rs, DataType.RS_MESH); 5196bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 5206bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 521a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 5228cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_MESH; 523a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 524a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 5258cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element PROGRAM_FRAGMENT(RenderScript rs) { 5266bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_PROGRAM_FRAGMENT == null) { 5276bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 5286bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_PROGRAM_FRAGMENT == null) { 5296bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_PROGRAM_FRAGMENT = createUser(rs, DataType.RS_PROGRAM_FRAGMENT); 5306bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 5316bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 532a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 5338cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_PROGRAM_FRAGMENT; 534a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 535a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 5368cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element PROGRAM_VERTEX(RenderScript rs) { 5376bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_PROGRAM_VERTEX == null) { 5386bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 5396bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_PROGRAM_VERTEX == null) { 5406bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_PROGRAM_VERTEX = createUser(rs, DataType.RS_PROGRAM_VERTEX); 5416bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 5426bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 543a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 5448cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_PROGRAM_VERTEX; 545a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 546a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 5478cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element PROGRAM_RASTER(RenderScript rs) { 5486bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_PROGRAM_RASTER == null) { 5496bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 5506bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_PROGRAM_RASTER == null) { 5516bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_PROGRAM_RASTER = createUser(rs, DataType.RS_PROGRAM_RASTER); 5526bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 5536bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 554a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 5558cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_PROGRAM_RASTER; 556a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 557a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 5588cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element PROGRAM_STORE(RenderScript rs) { 5596bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_PROGRAM_STORE == null) { 5606bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 5616bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_PROGRAM_STORE == null) { 5626bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_PROGRAM_STORE = createUser(rs, DataType.RS_PROGRAM_STORE); 5636bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 5646bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 565a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 5668cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_PROGRAM_STORE; 567a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 568a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 5693a2914132146f340511425d7f78540098606b512Stephen Hines public static Element FONT(RenderScript rs) { 5706bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_FONT == null) { 5716bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 5726bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_FONT == null) { 5736bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_FONT = createUser(rs, DataType.RS_FONT); 5746bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 5756bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 5763a2914132146f340511425d7f78540098606b512Stephen Hines } 5773a2914132146f340511425d7f78540098606b512Stephen Hines return rs.mElement_FONT; 5783a2914132146f340511425d7f78540098606b512Stephen Hines } 5793a2914132146f340511425d7f78540098606b512Stephen Hines 5803c0dfbab807a459622aeade4940daddf482dec66Jason Sams public static Element A_8(RenderScript rs) { 5816bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_A_8 == null) { 5826bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 5836bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_A_8 == null) { 5846bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_A_8 = createPixel(rs, DataType.UNSIGNED_8, DataKind.PIXEL_A); 5856bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 5866bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 5873c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 5883c0dfbab807a459622aeade4940daddf482dec66Jason Sams return rs.mElement_A_8; 5893c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 5903c0dfbab807a459622aeade4940daddf482dec66Jason Sams 5913c0dfbab807a459622aeade4940daddf482dec66Jason Sams public static Element RGB_565(RenderScript rs) { 5926bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_RGB_565 == null) { 5936bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 5946bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_RGB_565 == null) { 5956bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_RGB_565 = createPixel(rs, DataType.UNSIGNED_5_6_5, DataKind.PIXEL_RGB); 5966bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 5976bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 5983c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 5993c0dfbab807a459622aeade4940daddf482dec66Jason Sams return rs.mElement_RGB_565; 6003c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 6013c0dfbab807a459622aeade4940daddf482dec66Jason Sams 6023c0dfbab807a459622aeade4940daddf482dec66Jason Sams public static Element RGB_888(RenderScript rs) { 6036bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_RGB_888 == null) { 6046bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 6056bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_RGB_888 == null) { 6066bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_RGB_888 = createPixel(rs, DataType.UNSIGNED_8, DataKind.PIXEL_RGB); 6076bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 6086bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 6093c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 6103c0dfbab807a459622aeade4940daddf482dec66Jason Sams return rs.mElement_RGB_888; 6113c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 6123c0dfbab807a459622aeade4940daddf482dec66Jason Sams 6133c0dfbab807a459622aeade4940daddf482dec66Jason Sams public static Element RGBA_5551(RenderScript rs) { 6146bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_RGBA_5551 == null) { 6156bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 6166bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_RGBA_5551 == null) { 6176bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_RGBA_5551 = createPixel(rs, DataType.UNSIGNED_5_5_5_1, DataKind.PIXEL_RGBA); 6186bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 6196bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 6203c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 6213c0dfbab807a459622aeade4940daddf482dec66Jason Sams return rs.mElement_RGBA_5551; 6223c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 6233c0dfbab807a459622aeade4940daddf482dec66Jason Sams 6243c0dfbab807a459622aeade4940daddf482dec66Jason Sams public static Element RGBA_4444(RenderScript rs) { 6256bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_RGBA_4444 == null) { 6266bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 6276bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_RGBA_4444 == null) { 6286bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_RGBA_4444 = createPixel(rs, DataType.UNSIGNED_4_4_4_4, DataKind.PIXEL_RGBA); 6296bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 6306bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 6313c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 6323c0dfbab807a459622aeade4940daddf482dec66Jason Sams return rs.mElement_RGBA_4444; 6333c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 6343c0dfbab807a459622aeade4940daddf482dec66Jason Sams 6353c0dfbab807a459622aeade4940daddf482dec66Jason Sams public static Element RGBA_8888(RenderScript rs) { 6366bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_RGBA_8888 == null) { 6376bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 6386bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_RGBA_8888 == null) { 6396bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_RGBA_8888 = createPixel(rs, DataType.UNSIGNED_8, DataKind.PIXEL_RGBA); 6406bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 6416bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 6423c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 6433c0dfbab807a459622aeade4940daddf482dec66Jason Sams return rs.mElement_RGBA_8888; 6443c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 6453c0dfbab807a459622aeade4940daddf482dec66Jason Sams 646a5835a2e5fdb98fdf03a223ddf7e082ba1020807Jason Sams public static Element F16_2(RenderScript rs) { 6476bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_HALF_2 == null) { 6486bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 6496bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_HALF_2 == null) { 6506bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_HALF_2 = createVector(rs, DataType.FLOAT_16, 2); 6516bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 6526bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 653a5835a2e5fdb98fdf03a223ddf7e082ba1020807Jason Sams } 654a5835a2e5fdb98fdf03a223ddf7e082ba1020807Jason Sams return rs.mElement_HALF_2; 655a5835a2e5fdb98fdf03a223ddf7e082ba1020807Jason Sams } 656a5835a2e5fdb98fdf03a223ddf7e082ba1020807Jason Sams 657a5835a2e5fdb98fdf03a223ddf7e082ba1020807Jason Sams public static Element F16_3(RenderScript rs) { 6586bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_HALF_3 == null) { 6596bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 6606bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_HALF_3 == null) { 6616bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_HALF_3 = createVector(rs, DataType.FLOAT_16, 3); 6626bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 6636bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 664a5835a2e5fdb98fdf03a223ddf7e082ba1020807Jason Sams } 665a5835a2e5fdb98fdf03a223ddf7e082ba1020807Jason Sams return rs.mElement_HALF_3; 666a5835a2e5fdb98fdf03a223ddf7e082ba1020807Jason Sams } 667a5835a2e5fdb98fdf03a223ddf7e082ba1020807Jason Sams 668a5835a2e5fdb98fdf03a223ddf7e082ba1020807Jason Sams public static Element F16_4(RenderScript rs) { 6696bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_HALF_4 == null) { 6706bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 6716bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_HALF_4 == null) { 6726bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_HALF_4 = createVector(rs, DataType.FLOAT_16, 4); 6736bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 6746bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 675a5835a2e5fdb98fdf03a223ddf7e082ba1020807Jason Sams } 676a5835a2e5fdb98fdf03a223ddf7e082ba1020807Jason Sams return rs.mElement_HALF_4; 677a5835a2e5fdb98fdf03a223ddf7e082ba1020807Jason Sams } 678a5835a2e5fdb98fdf03a223ddf7e082ba1020807Jason Sams 6798cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element F32_2(RenderScript rs) { 6806bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_FLOAT_2 == null) { 6816bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 6826bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_FLOAT_2 == null) { 6836bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_FLOAT_2 = createVector(rs, DataType.FLOAT_32, 2); 6846bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 6856bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 6863c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 6878cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_FLOAT_2; 6883c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 6893c0dfbab807a459622aeade4940daddf482dec66Jason Sams 6908cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element F32_3(RenderScript rs) { 6916bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_FLOAT_3 == null) { 6926bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 6936bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_FLOAT_3 == null) { 6946bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_FLOAT_3 = createVector(rs, DataType.FLOAT_32, 3); 6956bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 6966bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 6973c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 6988cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_FLOAT_3; 69936e612a488511940b61f09803b270aa1c61b68e0Jason Sams } 70036e612a488511940b61f09803b270aa1c61b68e0Jason Sams 7018cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element F32_4(RenderScript rs) { 7026bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_FLOAT_4 == null) { 7036bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 7046bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_FLOAT_4 == null) { 7056bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_FLOAT_4 = createVector(rs, DataType.FLOAT_32, 4); 7066bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 7076bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 708718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams } 7098cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_FLOAT_4; 7103c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 71136e612a488511940b61f09803b270aa1c61b68e0Jason Sams 712836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element F64_2(RenderScript rs) { 7136bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_DOUBLE_2 == null) { 7146bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 7156bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_DOUBLE_2 == null) { 7166bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_DOUBLE_2 = createVector(rs, DataType.FLOAT_64, 2); 7176bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 7186bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 719836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 720836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_DOUBLE_2; 721836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 722836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 723836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element F64_3(RenderScript rs) { 7246bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_DOUBLE_3 == null) { 7256bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 7266bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_DOUBLE_3 == null) { 7276bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_DOUBLE_3 = createVector(rs, DataType.FLOAT_64, 3); 7286bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 7296bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 730836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 731836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_DOUBLE_3; 732836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 733836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 734836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element F64_4(RenderScript rs) { 7356bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_DOUBLE_4 == null) { 7366bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 7376bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_DOUBLE_4 == null) { 7386bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_DOUBLE_4 = createVector(rs, DataType.FLOAT_64, 4); 7396bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 7406bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 741836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 742836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_DOUBLE_4; 743836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 744836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 745836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element U8_2(RenderScript rs) { 7466bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_UCHAR_2 == null) { 7476bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 7486bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_UCHAR_2 == null) { 7496bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_UCHAR_2 = createVector(rs, DataType.UNSIGNED_8, 2); 7506bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 7516bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 752836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 753836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_UCHAR_2; 754836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 755836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 756836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element U8_3(RenderScript rs) { 7576bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_UCHAR_3 == null) { 7586bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 7596bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_UCHAR_3 == null) { 7606bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_UCHAR_3 = createVector(rs, DataType.UNSIGNED_8, 3); 7616bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 7626bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 763836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 764836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_UCHAR_3; 765836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 766836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 7678cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element U8_4(RenderScript rs) { 7686bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_UCHAR_4 == null) { 7696bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 7706bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_UCHAR_4 == null) { 7716bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_UCHAR_4 = createVector(rs, DataType.UNSIGNED_8, 4); 7726bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 7736bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 77436e612a488511940b61f09803b270aa1c61b68e0Jason Sams } 7758cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_UCHAR_4; 77636e612a488511940b61f09803b270aa1c61b68e0Jason Sams } 77736e612a488511940b61f09803b270aa1c61b68e0Jason Sams 778836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element I8_2(RenderScript rs) { 7796bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_CHAR_2 == null) { 7806bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 7816bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_CHAR_2 == null) { 7826bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_CHAR_2 = createVector(rs, DataType.SIGNED_8, 2); 7836bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 7846bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 785836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 786836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_CHAR_2; 787836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 788836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 789836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element I8_3(RenderScript rs) { 7906bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_CHAR_3 == null) { 7916bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 7926bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_CHAR_3 == null) { 7936bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_CHAR_3 = createVector(rs, DataType.SIGNED_8, 3); 7946bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 7956bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 796836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 797836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_CHAR_3; 798836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 799836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 800836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element I8_4(RenderScript rs) { 8016bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_CHAR_4 == null) { 8026bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 8036bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_CHAR_4 == null) { 8046bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_CHAR_4 = createVector(rs, DataType.SIGNED_8, 4); 8056bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 8066bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 807836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 808836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_CHAR_4; 809836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 810836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 811836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element U16_2(RenderScript rs) { 8126bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_USHORT_2 == null) { 8136bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 8146bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_USHORT_2 == null) { 8156bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_USHORT_2 = createVector(rs, DataType.UNSIGNED_16, 2); 8166bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 8176bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 818836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 819836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_USHORT_2; 820836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 821836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 822836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element U16_3(RenderScript rs) { 8236bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_USHORT_3 == null) { 8246bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 8256bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_USHORT_3 == null) { 8266bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_USHORT_3 = createVector(rs, DataType.UNSIGNED_16, 3); 8276bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 8286bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 829836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 830836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_USHORT_3; 831836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 832836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 833836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element U16_4(RenderScript rs) { 8346bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_USHORT_4 == null) { 8356bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 8366bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_USHORT_4 == null) { 8376bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_USHORT_4 = createVector(rs, DataType.UNSIGNED_16, 4); 8386bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 8396bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 840836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 841836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_USHORT_4; 842836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 843836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 844836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element I16_2(RenderScript rs) { 8456bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_SHORT_2 == null) { 8466bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 8476bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_SHORT_2 == null) { 8486bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_SHORT_2 = createVector(rs, DataType.SIGNED_16, 2); 8496bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 8506bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 851836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 852836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_SHORT_2; 853836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 854836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 855836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element I16_3(RenderScript rs) { 8566bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_SHORT_3 == null) { 8576bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 8586bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_SHORT_3 == null) { 8596bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_SHORT_3 = createVector(rs, DataType.SIGNED_16, 3); 8606bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 8616bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 862836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 863836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_SHORT_3; 864836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 865836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 866836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element I16_4(RenderScript rs) { 8676bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_SHORT_4 == null) { 8686bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 8696bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_SHORT_4 == null) { 8706bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_SHORT_4 = createVector(rs, DataType.SIGNED_16, 4); 8716bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 8726bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 873836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 874836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_SHORT_4; 875836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 876836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 877836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element U32_2(RenderScript rs) { 8786bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_UINT_2 == null) { 8796bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 8806bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_UINT_2 == null) { 8816bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_UINT_2 = createVector(rs, DataType.UNSIGNED_32, 2); 8826bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 8836bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 884836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 885836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_UINT_2; 886836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 887836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 888836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element U32_3(RenderScript rs) { 8896bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_UINT_3 == null) { 8906bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 8916bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_UINT_3 == null) { 8926bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_UINT_3 = createVector(rs, DataType.UNSIGNED_32, 3); 8936bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 8946bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 895836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 896836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_UINT_3; 897836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 898836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 899836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element U32_4(RenderScript rs) { 9006bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_UINT_4 == null) { 9016bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 9026bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_UINT_4 == null) { 9036bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_UINT_4 = createVector(rs, DataType.UNSIGNED_32, 4); 9046bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 9056bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 906836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 907836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_UINT_4; 908836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 909836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 910836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element I32_2(RenderScript rs) { 9116bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_INT_2 == null) { 9126bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 9136bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_INT_2 == null) { 9146bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_INT_2 = createVector(rs, DataType.SIGNED_32, 2); 9156bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 9166bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 917836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 918836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_INT_2; 919836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 920836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 921836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element I32_3(RenderScript rs) { 9226bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_INT_3 == null) { 9236bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 9246bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_INT_3 == null) { 9256bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_INT_3 = createVector(rs, DataType.SIGNED_32, 3); 9266bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 9276bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 928836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 929836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_INT_3; 930836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 931836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 932836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element I32_4(RenderScript rs) { 9336bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_INT_4 == null) { 9346bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 9356bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_INT_4 == null) { 9366bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_INT_4 = createVector(rs, DataType.SIGNED_32, 4); 9376bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 9386bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 939836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 940836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_INT_4; 941836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 942836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 943836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element U64_2(RenderScript rs) { 9446bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_ULONG_2 == null) { 9456bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 9466bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_ULONG_2 == null) { 9476bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_ULONG_2 = createVector(rs, DataType.UNSIGNED_64, 2); 9486bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 9496bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 950836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 951836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_ULONG_2; 952836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 953836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 954836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element U64_3(RenderScript rs) { 9556bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_ULONG_3 == null) { 9566bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 9576bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_ULONG_3 == null) { 9586bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_ULONG_3 = createVector(rs, DataType.UNSIGNED_64, 3); 9596bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 9606bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 961836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 962836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_ULONG_3; 963836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 964836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 965836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element U64_4(RenderScript rs) { 9666bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_ULONG_4 == null) { 9676bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 9686bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_ULONG_4 == null) { 9696bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_ULONG_4 = createVector(rs, DataType.UNSIGNED_64, 4); 9706bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 9716bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 972836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 973836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_ULONG_4; 974836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 975836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 976836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element I64_2(RenderScript rs) { 9776bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_LONG_2 == null) { 9786bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 9796bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_LONG_2 == null) { 9806bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_LONG_2 = createVector(rs, DataType.SIGNED_64, 2); 9816bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 9826bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 983836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 984836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_LONG_2; 985836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 986836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 987836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element I64_3(RenderScript rs) { 9886bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_LONG_3 == null) { 9896bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 9906bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_LONG_3 == null) { 9916bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_LONG_3 = createVector(rs, DataType.SIGNED_64, 3); 9926bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 9936bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 994836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 995836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_LONG_3; 996836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 997836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 998836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element I64_4(RenderScript rs) { 9996bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_LONG_4 == null) { 10006bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 10016bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_LONG_4 == null) { 10026bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_LONG_4 = createVector(rs, DataType.SIGNED_64, 4); 10036bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 10046bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 1005836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 1006836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_LONG_4; 1007836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 1008836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 1009932e78e9903342e3494983fd3463084caab4ba42Tim Murray public static Element YUV(RenderScript rs) { 1010932e78e9903342e3494983fd3463084caab4ba42Tim Murray if (rs.mElement_YUV == null) { 10116bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 10126bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_YUV == null) { 10136bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_YUV = createPixel(rs, DataType.UNSIGNED_8, DataKind.PIXEL_YUV); 10146bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 10156bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 1016932e78e9903342e3494983fd3463084caab4ba42Tim Murray } 1017932e78e9903342e3494983fd3463084caab4ba42Tim Murray return rs.mElement_YUV; 1018932e78e9903342e3494983fd3463084caab4ba42Tim Murray } 1019932e78e9903342e3494983fd3463084caab4ba42Tim Murray 10201d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams public static Element MATRIX_4X4(RenderScript rs) { 10216bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_MATRIX_4X4 == null) { 10226bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 10236bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_MATRIX_4X4 == null) { 10246bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_MATRIX_4X4 = createUser(rs, DataType.MATRIX_4X4); 10256bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 10266bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 10271d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams } 10281d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams return rs.mElement_MATRIX_4X4; 10291d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams } 103065c80f824711f084c4ece9204f543a7809534294Jason Sams 103165c80f824711f084c4ece9204f543a7809534294Jason Sams /** @deprecated use MATRIX_4X4 103265c80f824711f084c4ece9204f543a7809534294Jason Sams */ 10331d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams public static Element MATRIX4X4(RenderScript rs) { 10341d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams return MATRIX_4X4(rs); 10351d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams } 10361d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams 10371d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams public static Element MATRIX_3X3(RenderScript rs) { 10386bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_MATRIX_3X3 == null) { 10396bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 10406bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_MATRIX_3X3 == null) { 10416bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_MATRIX_3X3 = createUser(rs, DataType.MATRIX_3X3); 10426bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 10436bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 10441d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams } 1045347697710d033036c533bd6cee409c4b4c19d437Alex Sakhartchouk return rs.mElement_MATRIX_3X3; 10461d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams } 10471d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams 10481d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams public static Element MATRIX_2X2(RenderScript rs) { 10496bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_MATRIX_2X2 == null) { 10506bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 10516bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mElement_MATRIX_2X2 == null) { 10526bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mElement_MATRIX_2X2 = createUser(rs, DataType.MATRIX_2X2); 10536bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 10546bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 10551d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams } 10561d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams return rs.mElement_MATRIX_2X2; 10571d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams } 105836e612a488511940b61f09803b270aa1c61b68e0Jason Sams 1059460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray Element(long id, RenderScript rs, Element[] e, String[] n, int[] as) { 10600de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk super(id, rs); 1061ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams mSize = 0; 1062fd79e02e0fec8620da7affaadcf275cf0518241aAlex Sakhartchouk mVectorSize = 1; 1063718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mElements = e; 1064718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mElementNames = n; 106570d4e5024298f71edb3b04867e05568f5495b4ceJason Sams mArraySizes = as; 10663aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk mType = DataType.NONE; 10673aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk mKind = DataKind.USER; 10687d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk mOffsetInBytes = new int[mElements.length]; 1069718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams for (int ct = 0; ct < mElements.length; ct++ ) { 10707d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk mOffsetInBytes[ct] = mSize; 10719e401bcd88a0fdeea96f53cb776e5de7b5b084cbAlex Sakhartchouk mSize += mElements[ct].mSize * mArraySizes[ct]; 1072718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams } 10733aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk updateVisibleSubElements(); 1074718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams } 1075718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 1076460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray Element(long id, RenderScript rs, DataType dt, DataKind dk, boolean norm, int size) { 10770de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk super(id, rs); 1078252c07802f7039f15f723751162e64a6621e6998Jason Sams if ((dt != DataType.UNSIGNED_5_6_5) && 1079252c07802f7039f15f723751162e64a6621e6998Jason Sams (dt != DataType.UNSIGNED_4_4_4_4) && 1080252c07802f7039f15f723751162e64a6621e6998Jason Sams (dt != DataType.UNSIGNED_5_5_5_1)) { 1081e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk if (size == 3) { 1082e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk mSize = dt.mSize * 4; 1083e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk } else { 1084e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk mSize = dt.mSize * size; 1085e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk } 1086252c07802f7039f15f723751162e64a6621e6998Jason Sams } else { 1087252c07802f7039f15f723751162e64a6621e6998Jason Sams mSize = dt.mSize; 1088252c07802f7039f15f723751162e64a6621e6998Jason Sams } 1089718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mType = dt; 1090718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mKind = dk; 1091718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mNormalized = norm; 1092718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mVectorSize = size; 109336e612a488511940b61f09803b270aa1c61b68e0Jason Sams } 109436e612a488511940b61f09803b270aa1c61b68e0Jason Sams 1095460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray Element(long id, RenderScript rs) { 10960de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk super(id, rs); 1097dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 1098dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1099dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk @Override 1100dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk void updateFromNative() { 110106d69de78845659e6904ae4964e606a7f1a6a4a8Jason Sams super.updateFromNative(); 1102dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1103dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements 1104dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk int[] dataBuffer = new int[5]; 1105e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nElementGetNativeData(getID(mRS), dataBuffer); 11060de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk 11070de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk mNormalized = dataBuffer[2] == 1 ? true : false; 11080de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk mVectorSize = dataBuffer[3]; 11090de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk mSize = 0; 1110dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk for (DataType dt: DataType.values()) { 1111dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk if(dt.mID == dataBuffer[0]){ 1112dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mType = dt; 11130de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk mSize = mType.mSize * mVectorSize; 1114dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 1115dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 1116dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk for (DataKind dk: DataKind.values()) { 1117dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk if(dk.mID == dataBuffer[1]){ 1118dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mKind = dk; 1119dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 1120dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 1121dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1122dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk int numSubElements = dataBuffer[4]; 1123dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk if(numSubElements > 0) { 1124dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mElements = new Element[numSubElements]; 1125dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mElementNames = new String[numSubElements]; 11267d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk mArraySizes = new int[numSubElements]; 11277d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk mOffsetInBytes = new int[numSubElements]; 1128dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 11299807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat long[] subElementIds = new long[numSubElements]; 1130e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nElementGetSubElements(getID(mRS), subElementIds, mElementNames, mArraySizes); 1131dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk for(int i = 0; i < numSubElements; i ++) { 11320de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk mElements[i] = new Element(subElementIds[i], mRS); 1133dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mElements[i].updateFromNative(); 11347d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk mOffsetInBytes[i] = mSize; 11357d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk mSize += mElements[i].mSize * mArraySizes[i]; 1136dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 1137dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 11383aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk updateVisibleSubElements(); 1139dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 1140dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 11419c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 1142a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Create a custom Element of the specified DataType. The DataKind will be 1143a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * set to USER and the vector size to 1 indicating non-vector. 1144a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 1145a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param rs The context associated with the new Element. 1146a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param dt The DataType for the new element. 1147a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Element 1148a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 1149bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams static Element createUser(RenderScript rs, DataType dt) { 11500de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk DataKind dk = DataKind.USER; 11510de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk boolean norm = false; 11520de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk int vecSize = 1; 1153460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray long id = rs.nElementCreate(dt.mID, dk.mID, norm, vecSize); 11540de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk return new Element(id, rs, dt, dk, norm, vecSize); 1155ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams } 1156ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams 11579c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 1158a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Create a custom vector element of the specified DataType and vector size. 11593beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines * DataKind will be set to USER. Only primitive types (FLOAT_32, FLOAT_64, 11603beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines * SIGNED_8, SIGNED_16, SIGNED_32, SIGNED_64, UNSIGNED_8, UNSIGNED_16, 11613beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines * UNSIGNED_32, UNSIGNED_64, BOOLEAN) are supported. 1162a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 1163a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param rs The context associated with the new Element. 11643beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines * @param dt The DataType for the new Element. 1165a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param size Vector size for the new Element. Range 2-4 inclusive 1166a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * supported. 1167a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 1168a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Element 1169a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 1170718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams public static Element createVector(RenderScript rs, DataType dt, int size) { 1171718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams if (size < 2 || size > 4) { 1172bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams throw new RSIllegalArgumentException("Vector size out of range 2-4."); 117336e612a488511940b61f09803b270aa1c61b68e0Jason Sams } 11743beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines 11753beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines switch (dt) { 11763beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines // Support only primitive integer/float/boolean types as vectors. 117754371b4b095f3b15f0eceb7660eb320bbf34453fJason Sams case FLOAT_16: 11783beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines case FLOAT_32: 11793beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines case FLOAT_64: 11803beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines case SIGNED_8: 11813beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines case SIGNED_16: 11823beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines case SIGNED_32: 11833beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines case SIGNED_64: 11843beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines case UNSIGNED_8: 11853beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines case UNSIGNED_16: 11863beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines case UNSIGNED_32: 11873beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines case UNSIGNED_64: 11883beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines case BOOLEAN: { 11893beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines DataKind dk = DataKind.USER; 11903beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines boolean norm = false; 1191460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray long id = rs.nElementCreate(dt.mID, dk.mID, norm, size); 11923beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines return new Element(id, rs, dt, dk, norm, size); 11933beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines } 11943beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines 11953beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines default: { 11963beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines throw new RSIllegalArgumentException("Cannot create vector of " + 11973beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines "non-primitive type."); 11983beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines } 11993beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines } 1200718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams } 120136e612a488511940b61f09803b270aa1c61b68e0Jason Sams 12029c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 1203a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Create a new pixel Element type. A matching DataType and DataKind must 1204a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * be provided. The DataType and DataKind must contain the same number of 1205a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * components. Vector size will be set to 1. 1206a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 1207a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param rs The context associated with the new Element. 1208a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param dt The DataType for the new element. 1209a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param dk The DataKind to specify the mapping of each component in the 1210a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * DataType. 1211a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 1212a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Element 1213a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 1214718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams public static Element createPixel(RenderScript rs, DataType dt, DataKind dk) { 1215718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams if (!(dk == DataKind.PIXEL_L || 1216718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams dk == DataKind.PIXEL_A || 1217718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams dk == DataKind.PIXEL_LA || 1218718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams dk == DataKind.PIXEL_RGB || 12198e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk dk == DataKind.PIXEL_RGBA || 1220dd6c8b34f172ba699954e4d3095dba8c0fd5e930Jason Sams dk == DataKind.PIXEL_DEPTH || 1221dd6c8b34f172ba699954e4d3095dba8c0fd5e930Jason Sams dk == DataKind.PIXEL_YUV)) { 1222c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams throw new RSIllegalArgumentException("Unsupported DataKind"); 122307ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams } 1224718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams if (!(dt == DataType.UNSIGNED_8 || 12258e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk dt == DataType.UNSIGNED_16 || 1226718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams dt == DataType.UNSIGNED_5_6_5 || 1227718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams dt == DataType.UNSIGNED_4_4_4_4 || 1228718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams dt == DataType.UNSIGNED_5_5_5_1)) { 1229c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams throw new RSIllegalArgumentException("Unsupported DataType"); 123007ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams } 1231718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams if (dt == DataType.UNSIGNED_5_6_5 && dk != DataKind.PIXEL_RGB) { 1232c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams throw new RSIllegalArgumentException("Bad kind and type combo"); 123307ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams } 1234718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams if (dt == DataType.UNSIGNED_5_5_5_1 && dk != DataKind.PIXEL_RGBA) { 1235c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams throw new RSIllegalArgumentException("Bad kind and type combo"); 123625ffcdc9d7e32c9c1eeb2b48cc2f17d1353e9faeJason Sams } 1237718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams if (dt == DataType.UNSIGNED_4_4_4_4 && dk != DataKind.PIXEL_RGBA) { 1238c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams throw new RSIllegalArgumentException("Bad kind and type combo"); 123907ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams } 12408e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk if (dt == DataType.UNSIGNED_16 && 12418e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk dk != DataKind.PIXEL_DEPTH) { 12428e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk throw new RSIllegalArgumentException("Bad kind and type combo"); 12438e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk } 124407ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams 1245718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams int size = 1; 12468e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk switch (dk) { 12478e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk case PIXEL_LA: 1248718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams size = 2; 12498e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk break; 12508e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk case PIXEL_RGB: 1251718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams size = 3; 12528e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk break; 12538e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk case PIXEL_RGBA: 1254718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams size = 4; 12558e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk break; 12568e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk case PIXEL_DEPTH: 12578e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk size = 2; 12588e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk break; 1259334ea0c98f051b5a6b85bc616c93304651854298Jason Sams } 1260334ea0c98f051b5a6b85bc616c93304651854298Jason Sams 12610de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk boolean norm = true; 1262460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray long id = rs.nElementCreate(dt.mID, dk.mID, norm, size); 12630de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk return new Element(id, rs, dt, dk, norm, size); 1264718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams } 126507ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams 12669c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 1267f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines * Check if the current Element is compatible with another Element. 1268f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines * Primitive Elements are compatible if they share the same underlying 1269f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines * size and type (i.e. U8 is compatible with A_8). User-defined Elements 1270f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines * must be equal in order to be compatible. This requires strict name 1271f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines * equivalence for all sub-Elements (in addition to structural equivalence). 1272f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines * 1273f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines * @param e The Element to check compatibility with. 1274f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines * 1275f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines * @return boolean true if the Elements are compatible, otherwise false. 1276f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines */ 1277f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines public boolean isCompatible(Element e) { 1278f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines // Try strict BaseObj equality to start with. 1279f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines if (this.equals(e)) { 1280f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines return true; 1281f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines } 1282f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines 1283f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines // Ignore mKind because it is allowed to be different (user vs. pixel). 1284f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines // We also ignore mNormalized because it can be different. The mType 1285209481137147e64c72f1d5737085b17736931bdaStephen Hines // field must not be NONE since we require name equivalence for 1286209481137147e64c72f1d5737085b17736931bdaStephen Hines // all user-created Elements. 1287f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines return ((mSize == e.mSize) && 1288209481137147e64c72f1d5737085b17736931bdaStephen Hines (mType != DataType.NONE) && 1289f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines (mType == e.mType) && 1290f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines (mVectorSize == e.mVectorSize)); 1291f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines } 1292f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines 12939c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 1294a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Builder class for producing complex elements with matching field and name 1295a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * pairs. The builder starts empty. The order in which elements are added 1296a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * is retained for the layout in memory. 1297a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 1298a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 1299718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams public static class Builder { 1300718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams RenderScript mRS; 1301718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams Element[] mElements; 1302718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams String[] mElementNames; 130370d4e5024298f71edb3b04867e05568f5495b4ceJason Sams int[] mArraySizes; 1304718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams int mCount; 1305e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk int mSkipPadding; 1306334ea0c98f051b5a6b85bc616c93304651854298Jason Sams 13079c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 1308a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Create a builder object. 1309a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 1310a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param rs 1311a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 1312718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams public Builder(RenderScript rs) { 1313718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mRS = rs; 1314718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mCount = 0; 1315718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mElements = new Element[8]; 1316718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mElementNames = new String[8]; 131770d4e5024298f71edb3b04867e05568f5495b4ceJason Sams mArraySizes = new int[8]; 1318718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams } 1319718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 13209c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 1321a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Add an array of elements to this element. 1322a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 1323a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param element 1324a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param name 1325a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param arraySize 1326a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 1327bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public Builder add(Element element, String name, int arraySize) { 132870d4e5024298f71edb3b04867e05568f5495b4ceJason Sams if (arraySize < 1) { 1329c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams throw new RSIllegalArgumentException("Array size cannot be less than 1."); 133070d4e5024298f71edb3b04867e05568f5495b4ceJason Sams } 1331e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk 1332e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk // Skip padding fields after a vector 3 type. 1333e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk if (mSkipPadding != 0) { 1334e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk if (name.startsWith("#padding_")) { 1335e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk mSkipPadding = 0; 1336e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk return this; 1337e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk } 1338e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk } 1339e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk 1340e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk if (element.mVectorSize == 3) { 1341e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk mSkipPadding = 1; 1342e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk } else { 1343e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk mSkipPadding = 0; 1344e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk } 1345e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk 1346718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams if(mCount == mElements.length) { 1347718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams Element[] e = new Element[mCount + 8]; 1348718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams String[] s = new String[mCount + 8]; 134970d4e5024298f71edb3b04867e05568f5495b4ceJason Sams int[] as = new int[mCount + 8]; 1350718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams System.arraycopy(mElements, 0, e, 0, mCount); 1351718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams System.arraycopy(mElementNames, 0, s, 0, mCount); 135270d4e5024298f71edb3b04867e05568f5495b4ceJason Sams System.arraycopy(mArraySizes, 0, as, 0, mCount); 1353718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mElements = e; 1354718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mElementNames = s; 135570d4e5024298f71edb3b04867e05568f5495b4ceJason Sams mArraySizes = as; 1356718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams } 1357718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mElements[mCount] = element; 1358718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mElementNames[mCount] = name; 135970d4e5024298f71edb3b04867e05568f5495b4ceJason Sams mArraySizes[mCount] = arraySize; 1360718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mCount++; 1361bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams return this; 136207ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams } 136307ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams 13649c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 1365a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Add a single element to this Element. 1366a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 1367a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param element 1368a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param name 1369a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 1370bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public Builder add(Element element, String name) { 1371bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams return add(element, name, 1); 137270d4e5024298f71edb3b04867e05568f5495b4ceJason Sams } 137370d4e5024298f71edb3b04867e05568f5495b4ceJason Sams 13749c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 1375a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Create the element from this builder. 1376a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 1377a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 1378a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Element 1379a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 138022534176fb5c1257130ef4ee589739ca42766a32Jason Sams public Element create() { 1381771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 1382718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams Element[] ein = new Element[mCount]; 1383718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams String[] sin = new String[mCount]; 138470d4e5024298f71edb3b04867e05568f5495b4ceJason Sams int[] asin = new int[mCount]; 1385718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams java.lang.System.arraycopy(mElements, 0, ein, 0, mCount); 1386718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams java.lang.System.arraycopy(mElementNames, 0, sin, 0, mCount); 138770d4e5024298f71edb3b04867e05568f5495b4ceJason Sams java.lang.System.arraycopy(mArraySizes, 0, asin, 0, mCount); 13880de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk 13899807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat long[] ids = new long[ein.length]; 13900de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk for (int ct = 0; ct < ein.length; ct++ ) { 13919807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat ids[ct] = ein[ct].getID(mRS); 13920de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk } 1393460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray long id = mRS.nElementCreate2(ids, sin, asin); 139470d4e5024298f71edb3b04867e05568f5495b4ceJason Sams return new Element(id, mRS, ein, sin, asin); 139536e612a488511940b61f09803b270aa1c61b68e0Jason Sams } 139636e612a488511940b61f09803b270aa1c61b68e0Jason Sams } 139736e612a488511940b61f09803b270aa1c61b68e0Jason Sams} 139836e612a488511940b61f09803b270aa1c61b68e0Jason Sams 1399