egl: Add _eglConvertIntsToAttribs()

This function converts an attribute list from EGLint[] to EGLAttrib[].
Will be used in following patches to cleanup EGLSync attribute parsing.

Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
This commit is contained in:
Chad Versace 2016-09-27 13:27:17 -07:00
parent f2c2f43d4e
commit 3e0d575a6d
2 changed files with 43 additions and 0 deletions

View file

@ -251,6 +251,47 @@ _eglUnlockDisplay(_EGLDisplay *dpy)
}
/**
* Convert an attribute list from EGLint[] to EGLAttrib[].
*
* Return an EGL error code. The output parameter out_attrib_list is modified
* only on success.
*/
EGLint
_eglConvertIntsToAttribs(const EGLint *int_list, EGLAttrib **out_attrib_list)
{
size_t len = 0;
EGLAttrib *attrib_list;
if (int_list) {
while (int_list[2*len] != EGL_NONE)
++len;
}
if (len == 0) {
*out_attrib_list = NULL;
return EGL_SUCCESS;
}
if (2*len + 1 > SIZE_MAX / sizeof(EGLAttrib))
return EGL_BAD_ALLOC;
attrib_list = malloc((2*len + 1) * sizeof(EGLAttrib));
if (!attrib_list)
return EGL_BAD_ALLOC;
for (size_t i = 0; i < len; ++i) {
attrib_list[2*i + 0] = int_list[2*i + 0];
attrib_list[2*i + 1] = int_list[2*i + 1];
}
attrib_list[2*len] = EGL_NONE;
*out_attrib_list = attrib_list;
return EGL_SUCCESS;
}
static EGLint *
_eglConvertAttribsToInt(const EGLAttrib *attr_list)
{

View file

@ -199,6 +199,8 @@ struct _egl_api
struct mesa_glinterop_export_out *out);
};
EGLint _eglConvertIntsToAttribs(const EGLint *int_list,
EGLAttrib **out_attrib_list);
#ifdef __cplusplus
}