Ok, quick update on state of explicit fence fd's / EGL_ANDROID_native_fence_sync: For folks working on other drivers wishing to add support, we don't have a "real" userspace yet. But Gustavo has added atomic support to kmscube (as well as all of his work for in/out fences in atomic ioctl, plus destaging sync-file stuff, etc). On top of that I have hacked up support for using fence fd's (via EGL_ANDROID_native_fence_sync plus atomic in/out fence support in libdrm+kernel) rather than pageflip events to synchronize rendering and kms. This should give some reasonable toy code for other folks working on other driver support to get started: https://github.com/robclark/kmscube/commits/atomic-fence The core and egl mesa patches are largely unchanged, other than a small addition of wiring up fence extension for gbm/drm. The gallium bits have gotten a bit simpler thanks to Marek's deferred-flush changes (although I haven't had a chance to add deferred-flush support in freedreno yet, so do your eglWaitSyncKHR() calls right before eglSwapBuffers() if you don't want perf to suck). I have also wired up freedreno support and Gustavo has started on virgl support.. it would be interesting to see some more drivers added to the mix. Anyways, what I have so far is here: https://github.com/freedreno/mesa/commits/wip-fence This and kmscube bits also depends on some libdrm changes here: https://github.com/freedreno/libdrm/commits/fences With all these bits, the (relatively trivial) kmscube is working, and not even leaking fd's or tearing or anything ;-) I think for the kms atomic/fence bits, the consensus is that we need a real userspace to get them merged. Which we are still waiting on. I think on the gpu side (mesa + libdrm_$drivername + submit/execbuf/etc ioctl bits on kernel side) the main thing we need is piglit tests. (Last time I checked, android/dEQP did not have any real tests for the ANDROID_native_fence_sync extension, other than perhaps checking that the driver advertised it.. which isn't really a test at all :-/). I'm not really sure how much bandwidth I'll have to work on this in the near future, so if some other interested party wants to step up and write some piglit tests, that would be great. Otherwise, at least for now the above kernel/libdrm/mesa/kmscube branches should give anyone else working on their drivers all the bits they need to get started on fence-fd support. BR, -R On Fri, Apr 1, 2016 at 4:29 PM, Rob Clark <robdclark@xxxxxxxxx> wrote: > From: Rob Clark <robclark@xxxxxxxxxxxxxxx> > > This patchset implements support for EGL_ANDROID_native_fence_sync[1] > for egl and gallium. This extension provides support for native fence > fd's (file descriptors) for the GPU. In a similar way to dma-buf fd's, > which provide a reference-counted userspace handle to buffers which > can be shared across drivers and across processes, native fence fd's > provide a reference-counted userspace handle to fences which can be > shared across drivers and across processes. > > This extension is already in use on android, and should be useful in > other environments. > > This is almost an RFC at this point (but I'd still like to get review > comments), since no driver actually supports this yet, and the upstream > kernel support for native fence fd's is work-in-progress[2][3][4]. But > it is a needed piece to fully wire up explicit synchronization across > devices, and needed to have an open source userspace for the ongoing > kernel work. > > [1] https://www.khronos.org/registry/egl/extensions/ANDROID/EGL_ANDROID_native_fence_sync.txt > [2] https://lists.freedesktop.org/archives/dri-devel/2016-March/103060.html > [3] https://lists.freedesktop.org/archives/dri-devel/2016-March/103451.html > [4] https://lists.freedesktop.org/archives/dri-devel/2016-March/103108.html > > Rob Clark (6): > egl: initialize SyncCondition after attr parsing > dri: extend fence extension to support native fd fences > egl: add EGL_ANDROID_native_fence_sync > gallium: add way for drivers to create fences without flushing > gallium: wire up server_wait_sync > gallium: support for native fence fd's > > include/GL/internal/dri_interface.h | 44 ++++++++++++++++++- > src/egl/drivers/dri2/egl_dri2.c | 48 +++++++++++++++++++++ > src/egl/main/eglapi.c | 36 ++++++++++++++-- > src/egl/main/eglapi.h | 2 + > src/egl/main/egldisplay.h | 1 + > src/egl/main/eglfallbacks.c | 1 + > src/egl/main/eglsync.c | 32 +++++++++++--- > src/egl/main/eglsync.h | 1 + > src/gallium/include/pipe/p_context.h | 47 ++++++++++++++++++++ > src/gallium/include/pipe/p_defines.h | 1 + > src/gallium/include/pipe/p_screen.h | 8 ++++ > src/gallium/state_trackers/dri/dri2.c | 80 +++++++++++++++++++++++++++++------ > 12 files changed, 278 insertions(+), 23 deletions(-) > > -- > 2.5.5 > _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel