Mesa (staging/18.2): drisw: Fix build on Android Nougat, which lacks shm (v2)

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Aug 8 09:20:59 UTC 2018


Module: Mesa
Branch: staging/18.2
Commit: fdbbe4c50c5e637ef38ced5ef299446bc54ecdd7
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=fdbbe4c50c5e637ef38ced5ef299446bc54ecdd7

Author: Chad Versace <chadversary at chromium.org>
Date:   Wed Jul 18 17:43:35 2018 -0700

drisw: Fix build on Android Nougat, which lacks shm (v2)

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.

Fixes: cf54bd5e8 "drisw: use shared memory when possible"
Reviewed-by: Dave Airlie <airlied at redhat.com>
Cc: Marc-André Lureau <marcandre.lureau at gmail.com>
(cherry picked from commit aaa41cd297f91583f0e5bddb11b736c0d03e333d)

---

 src/gallium/winsys/sw/dri/dri_sw_winsys.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/src/gallium/winsys/sw/dri/dri_sw_winsys.c b/src/gallium/winsys/sw/dri/dri_sw_winsys.c
index 40007200a5..d519bcfedd 100644
--- a/src/gallium/winsys/sw/dri/dri_sw_winsys.c
+++ b/src/gallium/winsys/sw/dri/dri_sw_winsys.c
@@ -26,8 +26,12 @@
  *
  **************************************************************************/
 
+#if !defined(ANDROID) || ANDROID_API_LEVEL >= 26
+/* Android's libc began supporting shm in Oreo */
+#define HAVE_SHM
 #include <sys/ipc.h>
 #include <sys/shm.h>
+#endif
 
 #include "pipe/p_compiler.h"
 #include "pipe/p_format.h"
@@ -83,6 +87,7 @@ dri_sw_is_displaytarget_format_supported( struct sw_winsys *ws,
    return TRUE;
 }
 
+#ifdef HAVE_SHM
 static char *
 alloc_shm(struct dri_sw_displaytarget *dri_sw_dt, unsigned size)
 {
@@ -101,6 +106,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 +137,11 @@ dri_sw_displaytarget_create(struct sw_winsys *winsys,
    size = dri_sw_dt->stride * nblocksy;
 
    dri_sw_dt->shmid = -1;
+
+#ifdef HAVE_SHM
    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 +165,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) {
+#ifdef HAVE_SHM
       shmdt(dri_sw_dt->data);
       shmctl(dri_sw_dt->shmid, IPC_RMID, 0);
+#endif
    } else {
       align_free(dri_sw_dt->data);
    }




More information about the mesa-commit mailing list