185d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni/*
285d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni * Copyright (C) 2016 The Android Open Source Project
385d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni *
485d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni * Licensed under the Apache License, Version 2.0 (the "License");
585d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni * you may not use this file except in compliance with the License.
685d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni * You may obtain a copy of the License at
785d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni *
885d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni *      http://www.apache.org/licenses/LICENSE-2.0
985d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni *
1085d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni * Unless required by applicable law or agreed to in writing, software
1185d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni * distributed under the License is distributed on an "AS IS" BASIS,
1285d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1385d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni * See the License for the specific language governing permissions and
1485d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni * limitations under the License.
1585d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni */
1685d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni
1785d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni#include "rsContext.h"
1885d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni
1985d0cb112010781ad07b5979f0824b7f0ae3987eYang Niusing namespace android;
2085d0cb112010781ad07b5979f0824b7f0ae3987eYang Niusing namespace android::renderscript;
2185d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni
2285d0cb112010781ad07b5979f0824b7f0ae3987eYang Niextern "C" void rsaElementGetNativeData(RsContext con, RsElement elem,
2385d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni                             uint32_t *elemData, uint32_t elemDataSize) {
2485d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni    rsAssert(elemDataSize == 5);
2585d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni    // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements
2685d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni    Element *e = static_cast<Element *>(elem);
2785d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni
2885d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni    (*elemData++) = (uint32_t)e->getType();
2985d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni    (*elemData++) = (uint32_t)e->getKind();
3085d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni    (*elemData++) = e->getComponent().getIsNormalized() ? 1 : 0;
3185d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni    (*elemData++) = e->getComponent().getVectorSize();
3285d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni    (*elemData++) = e->getFieldCount();
3385d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni}
3485d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni
3585d0cb112010781ad07b5979f0824b7f0ae3987eYang Niextern "C" void rsaElementGetSubElements(RsContext con, RsElement elem, uintptr_t *ids,
3685d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni                              const char **names, size_t *arraySizes, uint32_t dataSize) {
3785d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni    Element *e = static_cast<Element *>(elem);
3885d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni    rsAssert(e->getFieldCount() == dataSize);
3985d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni
4085d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni    for (uint32_t i = 0; i < dataSize; i ++) {
4185d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni        e->getField(i)->incUserRef();
4285d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni        ids[i] = (uintptr_t)e->getField(i);
4385d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni        names[i] = e->getFieldName(i);
4485d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni        arraySizes[i] = e->getFieldArraySize(i);
4585d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni    }
4685d0cb112010781ad07b5979f0824b7f0ae3987eYang Ni}
47