• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "rs_core.rsh"
2 #include "rs_graphics.rsh"
3 #include "rs_structs.h"
4 
5 /**
6 * Element
7 */
8 extern uint32_t __attribute__((overloadable))
rsElementGetSubElementCount(rs_element e)9         rsElementGetSubElementCount(rs_element e) {
10     Element_t *element = (Element_t *)e.p;
11     if (element == NULL) {
12         return 0;
13     }
14     return element->mHal.state.fieldsCount;
15 }
16 
17 extern rs_element __attribute__((overloadable))
rsElementGetSubElement(rs_element e,uint32_t index)18         rsElementGetSubElement(rs_element e, uint32_t index) {
19     Element_t *element = (Element_t *)e.p;
20     if (element == NULL || index >= element->mHal.state.fieldsCount) {
21         rs_element nullElem = {0};
22         return nullElem;
23     }
24     rs_element returnElem = {element->mHal.state.fields[index]};
25     return returnElem;
26 }
27 
28 extern uint32_t __attribute__((overloadable))
rsElementGetSubElementNameLength(rs_element e,uint32_t index)29         rsElementGetSubElementNameLength(rs_element e, uint32_t index) {
30     Element_t *element = (Element_t *)e.p;
31     if (element == NULL || index >= element->mHal.state.fieldsCount) {
32         return 0;
33     }
34     return element->mHal.state.fieldNameLengths[index];
35 }
36 
37 extern uint32_t __attribute__((overloadable))
rsElementGetSubElementName(rs_element e,uint32_t index,char * name,uint32_t nameLength)38         rsElementGetSubElementName(rs_element e, uint32_t index, char *name, uint32_t nameLength) {
39     Element_t *element = (Element_t *)e.p;
40     if (element == NULL || index >= element->mHal.state.fieldsCount ||
41         nameLength == 0 || name == 0) {
42         return 0;
43     }
44 
45     uint32_t numToCopy = element->mHal.state.fieldNameLengths[index];
46     if (nameLength < numToCopy) {
47         numToCopy = nameLength;
48     }
49     // Place the null terminator manually, in case of partial string
50     numToCopy --;
51     name[numToCopy] = '\0';
52     const char *nameSource = element->mHal.state.fieldNames[index];
53     for (uint32_t i = 0; i < numToCopy; i ++) {
54         name[i] = nameSource[i];
55     }
56     return numToCopy;
57 }
58 
59 extern uint32_t __attribute__((overloadable))
rsElementGetSubElementArraySize(rs_element e,uint32_t index)60         rsElementGetSubElementArraySize(rs_element e, uint32_t index) {
61     Element_t *element = (Element_t *)e.p;
62     if (element == NULL || index >= element->mHal.state.fieldsCount) {
63         return 0;
64     }
65     return element->mHal.state.fieldArraySizes[index];
66 }
67 
68 extern uint32_t __attribute__((overloadable))
rsElementGetSubElementOffsetBytes(rs_element e,uint32_t index)69         rsElementGetSubElementOffsetBytes(rs_element e, uint32_t index) {
70     Element_t *element = (Element_t *)e.p;
71     if (element == NULL || index >= element->mHal.state.fieldsCount) {
72         return 0;
73     }
74     return element->mHal.state.fieldOffsetBytes[index];
75 }
76 
77 extern uint32_t __attribute__((overloadable))
rsElementGetBytesSize(rs_element e)78         rsElementGetBytesSize(rs_element e) {
79     Element_t *element = (Element_t *)e.p;
80     if (element == NULL) {
81         return 0;
82     }
83     return element->mHal.state.elementSizeBytes;
84 }
85 
86 extern rs_data_type __attribute__((overloadable))
rsElementGetDataType(rs_element e)87         rsElementGetDataType(rs_element e) {
88     Element_t *element = (Element_t *)e.p;
89     if (element == NULL) {
90         return RS_TYPE_INVALID;
91     }
92     return element->mHal.state.dataType;
93 }
94 
95 extern rs_data_kind __attribute__((overloadable))
rsElementGetDataKind(rs_element e)96         rsElementGetDataKind(rs_element e) {
97     Element_t *element = (Element_t *)e.p;
98     if (element == NULL) {
99         return RS_KIND_INVALID;
100     }
101     return element->mHal.state.dataKind;
102 }
103 
104 extern uint32_t __attribute__((overloadable))
rsElementGetVectorSize(rs_element e)105         rsElementGetVectorSize(rs_element e) {
106     Element_t *element = (Element_t *)e.p;
107     if (element == NULL) {
108         return 0;
109     }
110     return element->mHal.state.vectorSize;
111 }
112