
ContextDestroy {
    direct
}

ContextGetMessage {
    direct
    param void *data
    param size_t *receiveLen
    param uint32_t *usrID
    ret RsMessageToClientType
}

ContextPeekMessage {
    direct
    param size_t *receiveLen
    param uint32_t *usrID
    ret RsMessageToClientType
}

ContextSendMessage {
    param uint32_t id
    param const uint8_t *data
}

ContextInitToClient {
    direct
}

ContextDeinitToClient {
    direct
}

TypeCreate {
    direct
    param RsElement e
    param uint32_t dimX
    param uint32_t dimY
    param uint32_t dimZ
    param bool mipmaps
    param bool faces
    param uint32_t yuv
    ret RsType
}

TypeCreate2 {
    direct
    param const RsTypeCreateParams *dat
    ret RsType
}

AllocationCreateTyped {
    direct
    param RsType vtype
    param RsAllocationMipmapControl mipmaps
    param uint32_t usages
    param uintptr_t ptr
    ret RsAllocation
}

AllocationCreateFromBitmap {
    direct
    param RsType vtype
    param RsAllocationMipmapControl mipmaps
    param const void *data
    param uint32_t usages
    ret RsAllocation
}

AllocationCubeCreateFromBitmap {
    direct
    param RsType vtype
    param RsAllocationMipmapControl mipmaps
    param const void *data
    param uint32_t usages
    ret RsAllocation
}

AllocationGetSurface {
    param RsAllocation alloc
    sync
    ret RsNativeWindow
}

AllocationSetSurface {
    param RsAllocation alloc
    param RsNativeWindow sur
    sync
    }

AllocationAdapterCreate {
    direct
    param RsType vtype
    param RsAllocation baseAlloc
    ret RsAllocation
}

AllocationAdapterOffset {
    param RsAllocation alloc
    param const uint32_t *offsets
}

ContextFinish {
    sync
    }

ContextDump {
    param int32_t bits
}

ContextSetPriority {
    param int32_t priority
    }

ContextDestroyWorker {
    sync
}

AssignName {
    param RsObjectBase obj
    param const char *name
    }

ObjDestroy {
    param RsAsyncVoidPtr objPtr
    handcodeApi
    }

ElementCreate {
        direct
    param RsDataType mType
    param RsDataKind mKind
    param bool mNormalized
    param uint32_t mVectorSize
    ret RsElement
    }

ElementCreate2 {
        direct
    param const RsElement * elements
    param const char ** names
    param const uint32_t * arraySize
    ret RsElement
    }

AllocationCopyToBitmap {
    param RsAllocation alloc
    param void * data
    }

AllocationGetPointer {
    param RsAllocation va
    param uint32_t lod
    param RsAllocationCubemapFace face
    param uint32_t z
    param uint32_t array
    param size_t *stride
    ret void *s
    }

Allocation1DData {
    param RsAllocation va
    param uint32_t xoff
    param uint32_t lod
    param uint32_t count
    param const void *data
    }

Allocation1DElementData {
    param RsAllocation va
    param uint32_t x
    param uint32_t lod
    param const void *data
    param size_t comp_offset
    }

AllocationElementData {
    param RsAllocation va
    param uint32_t x
    param uint32_t y
    param uint32_t z
    param uint32_t lod
    param const void *data
    param size_t comp_offset
    }

Allocation2DData {
    param RsAllocation va
    param uint32_t xoff
    param uint32_t yoff
    param uint32_t lod
    param RsAllocationCubemapFace face
    param uint32_t w
    param uint32_t h
    param const void *data
    param size_t stride
    }

Allocation3DData {
    param RsAllocation va
    param uint32_t xoff
    param uint32_t yoff
    param uint32_t zoff
    param uint32_t lod
    param uint32_t w
    param uint32_t h
    param uint32_t d
    param const void *data
    param size_t stride
    }

AllocationGenerateMipmaps {
    param RsAllocation va
}

AllocationRead {
    param RsAllocation va
    param void * data
    }

Allocation1DRead {
    param RsAllocation va
    param uint32_t xoff
    param uint32_t lod
    param uint32_t count
    param void *data
    }

AllocationElementRead {
    param RsAllocation va
    param uint32_t x
    param uint32_t y
    param uint32_t z
    param uint32_t lod
    param void *data
    param size_t comp_offset
    }

Allocation2DRead {
    param RsAllocation va
    param uint32_t xoff
    param uint32_t yoff
    param uint32_t lod
    param RsAllocationCubemapFace face
    param uint32_t w
    param uint32_t h
    param void *data
    param size_t stride
}

Allocation3DRead {
    param RsAllocation va
    param uint32_t xoff
    param uint32_t yoff
    param uint32_t zoff
    param uint32_t lod
    param uint32_t w
    param uint32_t h
    param uint32_t d
    param void *data
    param size_t stride
    }

AllocationSyncAll {
    param RsAllocation va
    param RsAllocationUsageType src
}

AllocationResize1D {
    param RsAllocation va
    param uint32_t dimX
    }

AllocationCopy2DRange {
    param RsAllocation dest
    param uint32_t destXoff
    param uint32_t destYoff
    param uint32_t destMip
    param uint32_t destFace
    param uint32_t width
    param uint32_t height
    param RsAllocation src
    param uint32_t srcXoff
    param uint32_t srcYoff
    param uint32_t srcMip
    param uint32_t srcFace
    }

AllocationCopy3DRange {
    param RsAllocation dest
    param uint32_t destXoff
    param uint32_t destYoff
    param uint32_t destZoff
    param uint32_t destMip
    param uint32_t width
    param uint32_t height
    param uint32_t depth
    param RsAllocation src
    param uint32_t srcXoff
    param uint32_t srcYoff
    param uint32_t srcZoff
    param uint32_t srcMip
    }

ClosureCreate {
    direct
    param RsScriptKernelID kernelID
    param RsAllocation returnValue
    param RsScriptFieldID * fieldIDs
    param uintptr_t * values
    param int * sizes
    param RsClosure * depClosures
    param RsScriptFieldID * depFieldIDs
    ret RsClosure
    }

InvokeClosureCreate {
    direct
    param RsScriptInvokeID invokeID
    param const void * params
    param const RsScriptFieldID * fieldIDs
    param const uintptr_t * values
    param const int * sizes
    ret RsClosure
}

ClosureSetArg {
  param RsClosure closureID
  param uint32_t index
  param uintptr_t value
  param size_t valueSize
}

ClosureSetGlobal {
  param RsClosure closureID
  param RsScriptFieldID fieldID
  param uintptr_t value
  param size_t valueSize
}

SamplerCreate {
    direct
    param RsSamplerValue magFilter
    param RsSamplerValue minFilter
    param RsSamplerValue wrapS
    param RsSamplerValue wrapT
    param RsSamplerValue wrapR
    param float mAniso
    ret RsSampler
}

ScriptBindAllocation {
    param RsScript vtm
    param RsAllocation va
    param uint32_t slot
    }

ScriptSetTimeZone {
    param RsScript s
    param const char * timeZone
    }

ScriptInvokeIDCreate {
    param RsScript s
    param uint32_t slot
    ret RsScriptInvokeID;
    }

ScriptInvoke {
    param RsScript s
    param uint32_t slot
    }

ScriptInvokeV {
    param RsScript s
    param uint32_t slot
    param const void * data
    }

ScriptForEach {
    param RsScript s
    param uint32_t slot
    param RsAllocation ain
    param RsAllocation aout
    param const void * usr
    param const RsScriptCall * sc
}

ScriptForEachMulti {
    param RsScript s
    param uint32_t slot
    param RsAllocation * ains
    param RsAllocation aout
    param const void * usr
    param const RsScriptCall * sc
}

ScriptSetVarI {
    param RsScript s
    param uint32_t slot
    param int value
    }

ScriptSetVarObj {
    param RsScript s
    param uint32_t slot
    param RsObjectBase value
    }

ScriptSetVarJ {
    param RsScript s
    param uint32_t slot
    param int64_t value
    }

ScriptSetVarF {
    param RsScript s
    param uint32_t slot
    param float value
    }

ScriptSetVarD {
    param RsScript s
    param uint32_t slot
    param double value
    }

ScriptSetVarV {
    param RsScript s
    param uint32_t slot
    param const void * data
    }

ScriptGetVarV {
    param RsScript s
    param uint32_t slot
    param void * data
    sync
    }

ScriptSetVarVE {
    param RsScript s
    param uint32_t slot
    param const void * data
    param RsElement e
    param const uint32_t * dims
    }


ScriptCCreate {
        param const char * resName
        param const char * cacheDir
    param const char * text
    ret RsScript
    }

ScriptIntrinsicCreate {
    param uint32_t id
    param RsElement eid
    ret RsScript
    }

ScriptKernelIDCreate {
    direct
    param RsScript sid
    param int slot
    param int sig
    ret RsScriptKernelID
    }

ScriptFieldIDCreate {
    direct
    param RsScript sid
    param int slot
    ret RsScriptFieldID
    }

ScriptGroupCreate {
    direct
    param RsScriptKernelID * kernels
    param RsScriptKernelID * src
    param RsScriptKernelID * dstK
    param RsScriptFieldID * dstF
    param const RsType * type
    ret RsScriptGroup
}

ScriptGroupSetOutput {
    param RsScriptGroup group
    param RsScriptKernelID kernel
    param RsAllocation alloc
}

ScriptGroupSetInput {
    param RsScriptGroup group
    param RsScriptKernelID kernel
    param RsAllocation alloc
}

ScriptGroupExecute {
    param RsScriptGroup group
}

ScriptGroup2Create{
    direct
    param const char * cacheDir
    param RsClosure * closures
    ret RsScriptGroup2
}

AllocationIoSend {
    param RsAllocation alloc
    }

AllocationIoReceive {
    param RsAllocation alloc
    }
