On Thu, Jul 19, 2018 at 10:43 AM, Chad Versace <chadvers...@chromium.org>
wrote:

> In commit cf54bd5e8, dri_sw_winsys.c began using <sys/shm.h> to support
> the new functions putImageShm, getImageShm in DRI_SWRastLoader. But
> Android began supporting System V shared memory only in Oreo. Nougat has
> no shm headers.
>
> Fix the build by ifdef'ing out the shm code on Nougat.
>

No that's horrible. At least make a HAVE_IPC define or something so
the if android horror can be hidden a bit out of the way at the top of the
file
or the build system.

Dave.


> Fixes: cf54bd5e8 "drisw: use shared memory when possible"
> Cc: Marc-André Lureau <marcandre.lureau
> Cc: Dave Airlie <airl...@redhat.com>
> ---
>  src/gallium/winsys/sw/dri/dri_sw_winsys.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
>
> diff --git a/src/gallium/winsys/sw/dri/dri_sw_winsys.c
> b/src/gallium/winsys/sw/dri/dri_sw_winsys.c
> index 40007200a5d..147e0f7c430 100644
> --- a/src/gallium/winsys/sw/dri/dri_sw_winsys.c
> +++ b/src/gallium/winsys/sw/dri/dri_sw_winsys.c
> @@ -26,8 +26,10 @@
>   *
>   ************************************************************
> **************/
>
> +#if !defined(ANDROID) || ANDROID_API_LEVEL >= 26
>  #include <sys/ipc.h>
>  #include <sys/shm.h>
> +#endif
>
>  #include "pipe/p_compiler.h"
>  #include "pipe/p_format.h"
> @@ -83,6 +85,7 @@ dri_sw_is_displaytarget_format_supported( struct
> sw_winsys *ws,
>     return TRUE;
>  }
>
> +#if !defined(ANDROID) || ANDROID_API_LEVEL >= 26
>  static char *
>  alloc_shm(struct dri_sw_displaytarget *dri_sw_dt, unsigned size)
>  {
> @@ -101,6 +104,7 @@ alloc_shm(struct dri_sw_displaytarget *dri_sw_dt,
> unsigned size)
>
>     return addr;
>  }
> +#endif
>
>  static struct sw_displaytarget *
>  dri_sw_displaytarget_create(struct sw_winsys *winsys,
> @@ -131,8 +135,11 @@ dri_sw_displaytarget_create(struct sw_winsys *winsys,
>     size = dri_sw_dt->stride * nblocksy;
>
>     dri_sw_dt->shmid = -1;
> +
> +#if !defined(ANDROID) || ANDROID_API_LEVEL >= 26
>     if (ws->lf->put_image_shm)
>        dri_sw_dt->data = alloc_shm(dri_sw_dt, size);
> +#endif
>
>     if(!dri_sw_dt->data)
>        dri_sw_dt->data = align_malloc(size, alignment);
> @@ -156,8 +163,10 @@ dri_sw_displaytarget_destroy(struct sw_winsys *ws,
>     struct dri_sw_displaytarget *dri_sw_dt = dri_sw_displaytarget(dt);
>
>     if (dri_sw_dt->shmid >= 0) {
> +#if !defined(ANDROID) || ANDROID_API_LEVEL >= 26
>        shmdt(dri_sw_dt->data);
>        shmctl(dri_sw_dt->shmid, IPC_RMID, 0);
> +#endif
>     } else {
>        align_free(dri_sw_dt->data);
>     }
> --
> 2.18.0.233.g985f88cf7e-goog
>
>
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to