mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-07 10:50:16 +01:00
drisw: Fix build on Android Nougat, which lacks shm (v2)
In commitcf54bd5e8, 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@redhat.com> Cc: Marc-André Lureau <marcandre.lureau@gmail.com> (cherry picked from commitaaa41cd297)
This commit is contained in:
parent
3c3589a0ba
commit
fdbbe4c50c
1 changed files with 11 additions and 0 deletions
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue