From 68d250fe9993cae517376f51028487e9fbef0984 Mon Sep 17 00:00:00 2001 From: xMeM Date: Tue, 10 Dec 2024 00:52:42 +0800 Subject: [PATCH 1/2] fix(libxshmfence): Disable futex because it won't work --- app/src/main/cpp/lorie/InitOutput.c | 2 ++ app/src/main/cpp/recipes/xshmfence.cmake | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/cpp/lorie/InitOutput.c b/app/src/main/cpp/lorie/InitOutput.c index fa2ae2c78..28792e4c4 100644 --- a/app/src/main/cpp/lorie/InitOutput.c +++ b/app/src/main/cpp/lorie/InitOutput.c @@ -71,6 +71,7 @@ from The Open Group. #include "cursorstr.h" #include "propertyst.h" #include "shmint.h" +#include "misyncshm.h" #include "glxserver.h" #include "glxutil.h" #include "fbconfigs.h" @@ -591,6 +592,7 @@ lorieScreenInit(ScreenPtr pScreen, unused int argc, unused char **argv) { QueueWorkProc(resetRootCursor, NULL, NULL); ShmRegisterFbFuncs(pScreen); + miSyncShmScreenInit(pScreen); return TRUE; } /* end lorieScreenInit */ diff --git a/app/src/main/cpp/recipes/xshmfence.cmake b/app/src/main/cpp/recipes/xshmfence.cmake index b30cb6cc1..cc01ca518 100644 --- a/app/src/main/cpp/recipes/xshmfence.cmake +++ b/app/src/main/cpp/recipes/xshmfence.cmake @@ -1,5 +1,5 @@ file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/values.h" CONTENT "#include ") execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "${CMAKE_CURRENT_SOURCE_DIR}/libxshmfence/src/xshmfence.h" "${CMAKE_CURRENT_BINARY_DIR}/X11/xshmfence.h") -add_library(xshmfence STATIC "libxshmfence/src/xshmfence_alloc.c" "libxshmfence/src/xshmfence_futex.c") +add_library(xshmfence STATIC "libxshmfence/src/xshmfence_alloc.c" "libxshmfence/src/xshmfence_pthread.c") target_include_directories(xshmfence PRIVATE "xorgproto/include" "${CMAKE_CURRENT_BINARY_DIR}") -target_compile_options(xshmfence PRIVATE "-DSHMDIR=\"/\"" "-DHAVE_FUTEX" "-DMAXINT=INT_MAX") +target_compile_options(xshmfence PRIVATE "-DSHMDIR=\"/\"" "-DHAVE_PTHREAD" "-DMAXINT=INT_MAX") From 3f04acb54f27a2ca8496f5cbe493734d91e00312 Mon Sep 17 00:00:00 2001 From: xMeM Date: Tue, 10 Dec 2024 00:59:04 +0800 Subject: [PATCH 2/2] fix(dri3.c): Allowed using the DRM_FORMAT_MOD_INVALID modifier --- app/src/main/cpp/lorie/dri3.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/cpp/lorie/dri3.c b/app/src/main/cpp/lorie/dri3.c index 81594d953..f78ccbd56 100644 --- a/app/src/main/cpp/lorie/dri3.c +++ b/app/src/main/cpp/lorie/dri3.c @@ -9,6 +9,7 @@ #include #include #include +#include "drm_fourcc.h" #include "screenint.h" #include "lorie.h" #include "renderer.h" @@ -441,12 +442,13 @@ static PixmapPtr loriePixmapFromFds(ScreenPtr screen, CARD8 num_fds, const int * return NULL; } - if (modifier != RAW_MMAPPABLE_FD && modifier != AHARDWAREBUFFER_SOCKET_FD) { + if (modifier != RAW_MMAPPABLE_FD && modifier != AHARDWAREBUFFER_SOCKET_FD && + modifier != DRM_FORMAT_MOD_INVALID) { log(ERROR, "DRI3: Modifier is not RAW_MMAPPABLE_FD or AHARDWAREBUFFER_SOCKET_FD"); return NULL; } - if (modifier == RAW_MMAPPABLE_FD) { + if (modifier == DRM_FORMAT_MOD_INVALID || modifier == RAW_MMAPPABLE_FD) { void *addr = mmap(NULL, strides[0] * height, PROT_READ, MAP_SHARED, fds[0], offsets[0]); if (!addr || addr == MAP_FAILED) { log(ERROR, "DRI3: RAW_MMAPPABLE_FD: mmap failed");