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