[Mesa-dev] [PATCH] egl/android: Fix build for Jelly Bean (v2)

Tapani Pälli tapani.palli at intel.com
Mon Jan 7 00:24:52 PST 2013


On 12/27/2012 10:22 PM, Chad Versace wrote:
> On 12/20/2012 09:00 PM, Tapani Pälli wrote:
>> On 12/21/2012 01:11 AM, Chad Versace wrote:
>>> In Jelly Bean, the interface to ANativeWindow changed. The change included
>>> adding a new parameter the queueBuffer and dequeueBuffer methods and
>>> removing the lockBuffer method.
>>>
>>> v2:
>>>    - s/fence_fd == -1/fence_fd != -1/
>>>    - Fix leak. Close the fence_fd.
>>>
>>> CC: Tapani Pälli <tapani.palli at intel.com>
>>> Signed-off-by: Chad Versace <chad.versace at linux.intel.com>
>>> ---
>>>   src/egl/drivers/dri2/platform_android.c | 59 +++++++++++++++++++++++++++++++++
>>>   src/egl/main/Android.mk                 |  5 +++
>>>   2 files changed, 64 insertions(+)
>>>
>>> diff --git a/src/egl/drivers/dri2/platform_android.c b/src/egl/drivers/dri2/platform_android.c
>>> index 15bf054..402df11 100644
>>> --- a/src/egl/drivers/dri2/platform_android.c
>>> +++ b/src/egl/drivers/dri2/platform_android.c
>>> @@ -31,6 +31,10 @@
>>>   #include <errno.h>
>>>   #include <dlfcn.h>
>>>   
>>> +#if ANDROID_VERSION >= 0x402
>>> +#include <sync/sync.h>
>>> +#endif
>>> +
>>>   /* for droid_get_pci_id */
>>>   #include <xf86drm.h>
>>>   #include <i915_drm.h>
>>> @@ -79,11 +83,48 @@ get_native_buffer_name(struct ANativeWindowBuffer *buf)
>>>   static EGLBoolean
>>>   droid_window_dequeue_buffer(struct dri2_egl_surface *dri2_surf)
>>>   {
>>> +#if ANDROID_VERSION >= 0x0402
>>> +   int fence_fd;
>>> +
>>> +   if (dri2_surf->window->dequeueBuffer(dri2_surf->window, &dri2_surf->buffer,
>>> +                                        &fence_fd))
>>> +      return EGL_FALSE;
>>> +
>>> +   /* If access to the buffer is controlled by a sync fence, then block on the
>>> +    * fence.
>>> +    *
>>> +    * It may be more performant to postpone blocking until there is an
>>> +    * immediate need to write to the buffer. But doing so would require adding
>>> +    * hooks to the DRI2 loader.
>>> +    *
>>> +    * From the ANativeWindow::dequeueBuffer documentation:
>>> +    *
>>> +    *    The libsync fence file descriptor returned in the int pointed to by
>>> +    *    the fenceFd argument will refer to the fence that must signal
>>> +    *    before the dequeued buffer may be written to.  A value of -1
>>> +    *    indicates that the caller may access the buffer immediately without
>>> +    *    waiting on a fence.  If a valid file descriptor is returned (i.e.
>>> +    *    any value except -1) then the caller is responsible for closing the
>>> +    *    file descriptor.
>>> +    */
>>> +    if (fence_fd >= 0) {
>>> +       /* From the SYNC_IOC_WAIT documentation in <linux/sync.h>:
>>> +        *
>>> +        *    Waits indefinitely if timeout < 0.
>>> +        */
>>> +        int timeout = -1;
>>> +        sync_wait(fence_fd, timeout);
>> I'm getting link error "error: undefined reference to 'sync_wait'",
>> where is this function coming from?
> sync_wait() comes from libsync. The last hunk of this patch, quoted below,
> links libsync into libGLES_mesa. I'm surprised that you are getting link
> errors, because the `make libGLES_mesa` succeeds for me. Did you apply
> patch 1/2?

Yep, now I noticed that 'bc' is required, I did not have bc (I'm 
compiling in a rather minimal chroot) so that's where things broke. With 
bc installed, it compiles fine.

>
>>> +        close(fd);
>> typo here, should be close(fence_fd)
> Typo is now fixed.
>
>> otherwise things look good to me;
>>
>> Reviewed-by: Tapani Pälli <tapani.palli at intel.com>
>
>>> diff --git a/src/egl/main/Android.mk b/src/egl/main/Android.mk
>>> index a4a00f3..97e4860 100644
>>> --- a/src/egl/main/Android.mk
>>> +++ b/src/egl/main/Android.mk
>>> @@ -79,7 +79,12 @@ LOCAL_STATIC_LIBRARIES += libmesa_egl_dri2
>>>   # require i915_dri and/or i965_dri
>>>   LOCAL_REQUIRED_MODULES += \
>>>   	$(addsuffix _dri, $(filter i915 i965, $(MESA_GPU_DRIVERS)))
>>> +
>>> +ifeq ($(shell echo "$(MESA_ANDROID_VERSION) >= 4.2" | bc),1)
>>> +    LOCAL_SHARED_LIBRARIES += \
>>> +        libsync
>>>   endif
>>> +endif # MESA_BUILD_CLASSIC
>>>   
>>>   ifeq ($(strip $(MESA_BUILD_GALLIUM)),true)
>>>   
>



More information about the mesa-dev mailing list