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