summaryrefslogtreecommitdiff
path: root/rsElement.cpp
diff options
context:
space:
mode:
authorAlex Sakhartchouk <alexst@google.com>2011-12-15 09:56:10 -0800
committerAlex Sakhartchouk <alexst@google.com>2011-12-15 09:56:28 -0800
commit253325d2a19162c1dd18de59c357e36adf4a760b (patch)
tree0d78e8f030940c5b4304806172edb81af337cd92 /rsElement.cpp
parentf6216f7699edc83b9c8f8383a6b0448210f0b579 (diff)
downloadrs-253325d2a19162c1dd18de59c357e36adf4a760b.tar.gz
Element HAL sturct, script side getters
Change-Id: If98dd4c22bce58dca2c9739c8aee935a2dd0b493
Diffstat (limited to 'rsElement.cpp')
-rw-r--r--rsElement.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/rsElement.cpp b/rsElement.cpp
index 56c31b66..8b607017 100644
--- a/rsElement.cpp
+++ b/rsElement.cpp
@@ -47,6 +47,12 @@ void Element::clear() {
mFields = NULL;
mFieldCount = 0;
mHasReference = false;
+
+ delete [] mHal.state.fields;
+ delete [] mHal.state.fieldArraySizes;
+ delete [] mHal.state.fieldNames;
+ delete [] mHal.state.fieldNameLengths;
+ delete [] mHal.state.fieldOffsetBytes;
}
size_t Element::getSizeBits() const {
@@ -157,13 +163,26 @@ Element *Element::createFromStream(Context *rsc, IStream *stream) {
}
void Element::compute() {
+ mHal.state.dataType = mComponent.getType();
+ mHal.state.dataKind = mComponent.getKind();
+ mHal.state.vectorSize = mComponent.getVectorSize();
+
if (mFieldCount == 0) {
mBits = mComponent.getBits();
mBitsUnpadded = mComponent.getBitsUnpadded();
mHasReference = mComponent.isReference();
+
+ mHal.state.elementSizeBytes = getSizeBytes();
return;
}
+ mHal.state.fields = new const Element*[mFieldCount];
+ mHal.state.fieldArraySizes = new uint32_t[mFieldCount];
+ mHal.state.fieldNames = new const char*[mFieldCount];
+ mHal.state.fieldNameLengths = new uint32_t[mFieldCount];
+ mHal.state.fieldOffsetBytes = new uint32_t[mFieldCount];
+ mHal.state.fieldsCount = mFieldCount;
+
size_t bits = 0;
size_t bitsUnpadded = 0;
for (size_t ct=0; ct < mFieldCount; ct++) {
@@ -175,8 +194,15 @@ void Element::compute() {
if (mFields[ct].e->mHasReference) {
mHasReference = true;
}
+
+ mHal.state.fields[ct] = mFields[ct].e.get();
+ mHal.state.fieldArraySizes[ct] = mFields[ct].arraySize;
+ mHal.state.fieldNames[ct] = mFields[ct].name.string();
+ mHal.state.fieldNameLengths[ct] = mFields[ct].name.length();
+ mHal.state.fieldOffsetBytes[ct] = mFields[ct].offsetBits >> 3;
}
+ mHal.state.elementSizeBytes = getSizeBytes();
}
ObjectBaseRef<const Element> Element::createRef(Context *rsc, RsDataType dt, RsDataKind dk,