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