# For documentation on the .attrib file format, see:
# android/android-emugl/host/tools/emugen/README

GLOBAL
	base_opcode 10000
	encoder_headers <stdint.h> <EGL/egl.h> "glUtils.h"

rcGetEGLVersion
    dir major out
    len major sizeof(EGLint)
    dir minor out
    len minor sizeof(EGLint)

rcQueryEGLString
    dir buffer out
    len buffer bufferSize

rcGetGLString
    dir buffer out
    len buffer bufferSize

rcGetNumConfigs
    dir numAttribs out
    len numAttribs sizeof(uint32_t)

rcGetConfigs
    dir buffer out
    len buffer bufSize

rcChooseConfig
    dir attribs in
    len attribs attribs_size
    dir configs out
    var_flag configs nullAllowed
    len configs configs_size*sizeof(uint32_t)

rcReadColorBuffer
    dir pixels out
    len pixels (((glUtilsPixelBitSize(format, type) * width) >> 3) * height)

rcReadColorBufferYUV
    dir pixels out
    len pixels pixels_size

rcUpdateColorBuffer
    dir pixels in
    len pixels (((glUtilsPixelBitSize(format, type) * width) >> 3) * height)
    var_flag pixels isLarge

rcUpdateColorBufferDMA
    dir pixels in
    len pixels pixels_size
    var_flag pixels DMA
    flag flushOnEncode

rcCloseColorBuffer
    flag flushOnEncode

rcCreateSyncKHR
    dir attribs in
    len attribs num_attribs
    dir glsync_out out
    len glsync_out sizeof(uint64_t)
    dir syncthread_out out
    len syncthread_out sizeof(uint64_t)

rcCompose
    dir buffer in
    len buffer bufferSize
    flag flushOnEncode

rcCreateDisplay
    dir displayId out
    len displayId sizeof(uint32_t)

rcGetDisplayColorBuffer
    dir colorBuffer out
    len colorBuffer sizeof(uint32_t)

rcGetColorBufferDisplay
    dir displayId out
    len displayId sizeof(uint32_t)

rcGetDisplayPose
    dir x out
    len x sizeof(int32_t)
    dir y out
    len y sizeof(int32_t)
    dir w out
    len w sizeof(uint32_t)
    dir h out
    len h sizeof(uint32_t)

rcMakeCurrentAsync
    flag flushOnEncode

rcComposeAsync
    dir buffer in
    len buffer bufferSize
    flag flushOnEncode

rcDestroySyncKHRAsync
    flag flushOnEncode

rcComposeWithoutPost
    dir buffer in
    len buffer bufferSize
    flag flushOnEncode

rcComposeAsyncWithoutPost
    dir buffer in
    len buffer bufferSize
    flag flushOnEncode

rcReadColorBufferDMA
    dir pixels out
    len pixels pixels_size
    var_flag pixels DMA

rcSetProcessMetadata
    len key (strlen(key) + 1)
    len valuePtr valueSize

rcGetHostExtensionsString
    dir buffer out
    len buffer bufferSize