114607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk/* 214607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * Copyright (C) 2012 The Android Open Source Project 314607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * 414607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * Licensed under the Apache License, Version 2.0 (the "License"); 514607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * you may not use this file except in compliance with the License. 614607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * You may obtain a copy of the License at 714607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * 814607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * http://www.apache.org/licenses/LICENSE-2.0 914607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * 1014607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * Unless required by applicable law or agreed to in writing, software 1114607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * distributed under the License is distributed on an "AS IS" BASIS, 1214607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1314607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * See the License for the specific language governing permissions and 1414607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * limitations under the License. 1514607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk */ 1614607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk 1714607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk/** @file rs_element.rsh 1814607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * \brief Element routines 1914607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * 2014607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * 2114607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk */ 2214607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk 2314607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk#ifndef __RS_ELEMENT_RSH__ 2414607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk#define __RS_ELEMENT_RSH__ 2514607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk 26340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk// New API's 273c0c6061ce428609182eedcf82c7f75df074fcf4Alex Sakhartchouk#if (defined(RS_VERSION) && (RS_VERSION >= 16)) 283c0c6061ce428609182eedcf82c7f75df074fcf4Alex Sakhartchouk 2914607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk/** 30340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * Elements could be simple, such as an int or a float, or a 31340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * structure with multiple sub elements, such as a collection of 32340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * floats, float2, float4. This function returns zero for simple 33340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * elements or the number of sub-elements otherwise. 34340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * 3514607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * @param e element to get data from 3614607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * @return number of sub-elements in this element 3714607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk */ 3814607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchoukextern uint32_t __attribute__((overloadable)) 3914607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk rsElementGetSubElementCount(rs_element e); 4014607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk 4114607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk/** 42340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * For complex elements, this function will return the 43340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * sub-element at index 44340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * 4514607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * @param e element to get data from 4614607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * @param index index of the sub-element to return 4714607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * @return sub-element in this element at given index 4814607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk */ 4914607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchoukextern rs_element __attribute__((overloadable)) 5014607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk rsElementGetSubElement(rs_element, uint32_t index); 5114607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk 5214607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk/** 53340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * For complex elements, this function will return the length of 54340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * sub-element name at index 55340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * 5614607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * @param e element to get data from 5714607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * @param index index of the sub-element to return 5814607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * @return length of the sub-element name including the null 5914607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * terminator (size of buffer needed to write the name) 6014607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk */ 6114607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchoukextern uint32_t __attribute__((overloadable)) 6214607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk rsElementGetSubElementNameLength(rs_element e, uint32_t index); 6314607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk 6414607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk/** 65340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * For complex elements, this function will return the 66340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * sub-element name at index 67340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * 6814607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * @param e element to get data from 6914607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * @param index index of the sub-element 7014607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * @param name array to store the name into 7114607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * @param nameLength length of the provided name array 7214607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * @return number of characters actually written, excluding the 7314607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * null terminator 7414607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk */ 7514607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchoukextern uint32_t __attribute__((overloadable)) 7614607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk rsElementGetSubElementName(rs_element e, uint32_t index, char *name, uint32_t nameLength); 7714607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk 7814607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk/** 79340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * For complex elements, some sub-elements could be statically 80340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * sized arrays. This function will return the array size for 81340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * sub-element at index 82340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * 8314607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * @param e element to get data from 8414607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * @param index index of the sub-element 8514607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * @return array size of sub-element in this element at given 8614607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * index 8714607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk */ 8814607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchoukextern uint32_t __attribute__((overloadable)) 8914607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk rsElementGetSubElementArraySize(rs_element e, uint32_t index); 9014607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk 9114607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk/** 92340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * This function specifies the location of a sub-element within 93340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * the element 94340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * 9514607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * @param e element to get data from 9614607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * @param index index of the sub-element 9714607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * @return offset in bytes of sub-element in this element at 9814607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * given index 9914607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk */ 10014607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchoukextern uint32_t __attribute__((overloadable)) 10114607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk rsElementGetSubElementOffsetBytes(rs_element e, uint32_t index); 10214607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk 10314607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk/** 104340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * Returns the size of element in bytes 105340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * 10614607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * @param e element to get data from 10714607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * @return total size of the element in bytes 10814607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk */ 10914607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchoukextern uint32_t __attribute__((overloadable)) 110340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk rsElementGetBytesSize(rs_element e); 11114607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk 11214607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk/** 113340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * Returns the element's data type 114340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * 11514607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * @param e element to get data from 11614607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * @return element's data type 11714607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk */ 11814607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchoukextern rs_data_type __attribute__((overloadable)) 11914607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk rsElementGetDataType(rs_element e); 12014607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk 12114607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk/** 122340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * Returns the element's data kind 123340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * 12414607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * @param e element to get data from 12514607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * @return element's data size 12614607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk */ 12714607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchoukextern rs_data_kind __attribute__((overloadable)) 12814607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk rsElementGetDataKind(rs_element e); 12914607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk 13014607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk/** 131340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * Returns the element's vector size 132340d15add608408d64cc2b9bec4f0d1924552cf5Alex Sakhartchouk * 13314607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * @param e element to get data from 13414607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * @return length of the element vector (for float2, float3, 13514607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk * etc.) 13614607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk */ 13714607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchoukextern uint32_t __attribute__((overloadable)) 13814607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk rsElementGetVectorSize(rs_element e); 13914607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk 1403c0c6061ce428609182eedcf82c7f75df074fcf4Alex Sakhartchouk#endif // (defined(RS_VERSION) && (RS_VERSION >= 16)) 1413c0c6061ce428609182eedcf82c7f75df074fcf4Alex Sakhartchouk 14214607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk#endif // __RS_ELEMENT_RSH__ 14314607a6bd1e909a7944e39b7ec71dc0ba65de2cdAlex Sakhartchouk 144