[Mesa-dev] [PATCH 0/6] mesa: support for EGL_ANDROID_native_fence_sync
Rob Clark
robdclark at gmail.com
Fri Aug 19 22:39:49 UTC 2016
On Fri, Aug 19, 2016 at 5:57 PM, Rob Clark <robdclark at gmail.com> wrote:
> 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.
Oh, I forgot to mention, kernel bits here:
https://github.com/freedreno/kernel-msm/commits/integration-linux-qcomlt-fences
BR,
-R
>
>
> On Fri, Apr 1, 2016 at 4:29 PM, Rob Clark <robdclark at gmail.com> wrote:
>> From: Rob Clark <robclark at freedesktop.org>
>>
>> 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
>>
More information about the mesa-dev
mailing list