diff --git a/rsElement.cpp b/rsElement.cpp
index 56c31b6..8b60701 100644
--- a/rsElement.cpp
+++ b/rsElement.cpp
@@ -47,6 +47,12 @@
     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 @@
 }
 
 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 @@
         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,
diff --git a/rsElement.h b/rsElement.h
index 04010fa..010c612 100644
--- a/rsElement.h
+++ b/rsElement.h
@@ -28,6 +28,27 @@
 // An element is a group of Components that occupies one cell in a structure.
 class Element : public ObjectBase {
 public:
+    struct Hal {
+        mutable void *drv;
+
+        struct State {
+            RsDataType dataType;
+            RsDataKind dataKind;
+            uint32_t vectorSize;
+            uint32_t elementSizeBytes;
+
+            // Subelements
+            const Element **fields;
+            uint32_t *fieldArraySizes;
+            const char **fieldNames;
+            uint32_t *fieldNameLengths;
+            uint32_t *fieldOffsetBytes;
+            uint32_t fieldsCount;
+        };
+        State state;
+    };
+    Hal mHal;
+
     class Builder {
     public:
         Builder();
diff --git a/rsMesh.h b/rsMesh.h
index 0fc73fb..84a57ca 100644
--- a/rsMesh.h
+++ b/rsMesh.h
@@ -28,15 +28,6 @@
 // An element is a group of Components that occupies one cell in a structure.
 class Mesh : public ObjectBase {
 public:
-    Mesh(Context *);
-    Mesh(Context *, uint32_t vertexBuffersCount, uint32_t primitivesCount);
-    ~Mesh();
-
-    virtual void serialize(OStream *stream) const;
-    virtual RsA3DClassID getClassId() const { return RS_A3D_CLASS_ID_MESH; }
-    static Mesh *createFromStream(Context *rsc, IStream *stream);
-    void init();
-
     struct Hal {
         mutable void *drv;
 
@@ -57,6 +48,15 @@
     };
     Hal mHal;
 
+    Mesh(Context *);
+    Mesh(Context *, uint32_t vertexBuffersCount, uint32_t primitivesCount);
+    ~Mesh();
+
+    virtual void serialize(OStream *stream) const;
+    virtual RsA3DClassID getClassId() const { return RS_A3D_CLASS_ID_MESH; }
+    static Mesh *createFromStream(Context *rsc, IStream *stream);
+    void init();
+
     void setVertexBuffer(Allocation *vb, uint32_t index) {
         mVertexBuffers[index].set(vb);
         mHal.state.vertexBuffers[index] = vb;
diff --git a/scriptc/rs_allocation.rsh b/scriptc/rs_allocation.rsh
index 1cb3a99..4d62bfb 100644
--- a/scriptc/rs_allocation.rsh
+++ b/scriptc/rs_allocation.rsh
@@ -168,5 +168,29 @@
 extern const void * __attribute__((overloadable))
     rsGetElementAt(rs_allocation, uint32_t x, uint32_t y, uint32_t z);
 
+extern const rs_element __attribute__((overloadable))
+    rsAllocationGetElement(rs_allocation);
+
+extern const uint32_t __attribute__((overloadable))
+    rsMeshGetVertexAllocationCount(rs_mesh);
+
+extern const uint32_t __attribute__((overloadable))
+    rsMeshGetPrimitiveCount(rs_mesh);
+
+extern const uint32_t __attribute__((overloadable))
+    rsMeshGetVertexAllocationCount(rs_mesh);
+
+extern const rs_allocation __attribute__((overloadable))
+    rsMeshGetVertexAllocation(rs_mesh, uint32_t index);
+
+extern const uint32_t __attribute__((overloadable))
+    rsMeshGetPrimitiveCount(rs_mesh);
+
+extern const rs_allocation __attribute__((overloadable))
+    rsMeshGetIndexAllocation(rs_mesh, uint32_t index);
+
+extern const rs_primitive __attribute__((overloadable))
+    rsMeshGetPrimitive(rs_mesh, uint32_t index);
+
 #endif
 
diff --git a/scriptc/rs_types.rsh b/scriptc/rs_types.rsh
index a01807e..5c468bf 100644
--- a/scriptc/rs_types.rsh
+++ b/scriptc/rs_types.rsh
@@ -400,6 +400,15 @@
     RS_ALLOCATION_USAGE_GRAPHICS_RENDER_TARGET = 0x0010
 } rs_allocation_usage_type;
 
+typedef enum {
+    RS_PRIMITIVE_POINT,
+    RS_PRIMITIVE_LINE,
+    RS_PRIMITIVE_LINE_STRIP,
+    RS_PRIMITIVE_TRIANGLE,
+    RS_PRIMITIVE_TRIANGLE_STRIP,
+    RS_PRIMITIVE_TRIANGLE_FAN
+} rs_primitive;
+
 #endif //defined(RS_VERSION) && (RS_VERSION >= 14)
 
 #endif
