diff options
author | Alex Sakhartchouk <alexst@google.com> | 2011-12-15 09:56:10 -0800 |
---|---|---|
committer | Alex Sakhartchouk <alexst@google.com> | 2011-12-15 09:56:28 -0800 |
commit | 253325d2a19162c1dd18de59c357e36adf4a760b (patch) | |
tree | 0d78e8f030940c5b4304806172edb81af337cd92 /rsElement.cpp | |
parent | f6216f7699edc83b9c8f8383a6b0448210f0b579 (diff) | |
download | rs-253325d2a19162c1dd18de59c357e36adf4a760b.tar.gz |
Element HAL sturct, script side getters
Change-Id: If98dd4c22bce58dca2c9739c8aee935a2dd0b493
Diffstat (limited to 'rsElement.cpp')
-rw-r--r-- | rsElement.cpp | 26 |
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, |