First commit ensures that a native sync object exists before attempting export of
egl->signaled_fence by explicitly issuing
glFlush(), which is a requirement stated by the spec:
After associating the fence command with an EGL native fence sync object,
the next Flush() operation performed by the current client API causes a
new native fence object to be created, and the
EGL_SYNC_NATIVE_FENCE_ANDROID attribute of the EGL native fence object is
set to a file descriptor that refers to the new native fence object.
Export without an explicit
glFlush() magically works for modern gallium drivers, since
dri2_create_fence_fd() forces a context flush under-the-hood, but shouldn't be relied upon.
Second commit relaxes vrend's requirement on GLES context selection to use EGL-based fencing which I believe is not a restriction enforced in any way by either EGL_ANDROID_native_fence_sync or EGL_KHR_fence_sync.
We would like to support a
virgl_renderer_export_fence()-like API for both GLES and OpenGL context types when the host has EGL and supports these extensions.