[Mesa-dev] [EGL android: accquire fence implementation] i965: Queue the buffer with a sync fence for Android OS (v2)
Rafael Antognolli
rafael.antognolli at intel.com
Fri Jul 14 16:58:49 UTC 2017
On Sat, Jul 15, 2017 at 01:52:43AM +0900, Tomasz Figa wrote:
> Hi Rafael,
>
> On Sat, Jul 15, 2017 at 1:45 AM, Rafael Antognolli
> <rafael.antognolli at intel.com> wrote:
> > On Fri, Jul 14, 2017 at 09:13:49AM +0100, Chris Wilson wrote:
> >> Quoting Zhongmin Wu (2017-07-14 07:55:45)
> [snip]
> >> > extern uint32_t
> >> > diff --git a/src/mesa/drivers/dri/i915/intel_screen.c b/src/mesa/drivers/dri/i915/intel_screen.c
> >> > index cba5434..38d0e63 100644
> >> > --- a/src/mesa/drivers/dri/i915/intel_screen.c
> >> > +++ b/src/mesa/drivers/dri/i915/intel_screen.c
> >> > @@ -182,6 +182,7 @@ static const struct __DRI2flushExtensionRec intelFlushExtension = {
> >> >
> >> > .flush = intelDRI2Flush,
> >> > .invalidate = dri2InvalidateDrawable,
> >> > + .get_retrieve_fd = NULL,
> >> > };
> >> >
> >> > static struct intel_image_format intel_image_formats[] = {
> >> > diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
> >> > index 62d2fe8..9813c8c 100644
> >> > --- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c
> >> > +++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
> >> > @@ -648,9 +648,25 @@ do_flush_locked(struct brw_context *brw, int in_fence_fd, int *out_fence_fd)
> >> > /* Add the batch itself to the end of the validation list */
> >> > add_exec_bo(batch, batch->bo);
> >> >
> >> > + if (brw->driContext->driDrawablePriv &&
> >> > + brw->driContext->driDrawablePriv->retrieve_fd != -1) {
> >> > + close(brw->driContext->driDrawablePriv->retrieve_fd);
> >> > + brw->driContext->driDrawablePriv->retrieve_fd = -1;
> >> > + }
> >>
> >> No. Use the correct interfaces for creating a fence, stop imposing the
> >> cost upon everyone else.
> >
> > Yeah, that's correct, it definitely shouldn't be inside intel_batchbuffer.
> >
> > Chris, the main problem that Zhongmin raised was that on
> > droid_window_cancel_buffer the context has been previously destroyed already,
> > so they can't create a new fence for that old context. I haven't checked this
> > myself as I don't have an android build.
>
> Yes, that's a problem. But it should be solved at the source and not
> by digging around it. IMHO it's a limitation of EGL DRI2 code and
> that's where it should be fixed, by using all the tools already
> available (i.e. DRI2 fence extension).
Sure, I'm not saying it shouldn't, was just trying to help.
> >
> > Still, it looks to me that they would need to store the previous fence to
> > solve this.
>
> Makes sense.
>
> >
> > So, the right place to do so would be inside platform_android.c,
> > right? And since I don't see any private struct that could store such fence
> > there, one option would be to extend the struct dri2_egl_surface for android,
> > adding private data there. Does that make sense?
>
> I'd say these fences are not 100% Android-specific anymore. They are
> an upstream Linux feature and can be used on other platforms as well.
> I think wiring this properly in EGL DRI2 core would make sense,
> especially since this is the place where the context is being
> destroyed (platform_android doesn't handle context destruction).
Ah, yes, that makes sense. I'll see if I can help.
Thanks!
Rafael
More information about the mesa-dev
mailing list