From 475a937ed97aafc54cca02789a7f49c24038db48 Mon Sep 17 00:00:00 2001 From: Christoph Reiter Date: Tue, 14 Nov 2023 20:54:09 +0100 Subject: [PATCH] libva: add relocation support for the default drivers path --- ...001-libva-add-driver-path-relocation.patch | 53 +++++++++++++++++++ mingw-w64-libva/PKGBUILD | 10 ++-- 2 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 mingw-w64-libva/0001-libva-add-driver-path-relocation.patch diff --git a/mingw-w64-libva/0001-libva-add-driver-path-relocation.patch b/mingw-w64-libva/0001-libva-add-driver-path-relocation.patch new file mode 100644 index 0000000000000..862fbe681a495 --- /dev/null +++ b/mingw-w64-libva/0001-libva-add-driver-path-relocation.patch @@ -0,0 +1,53 @@ +--- libva-2.20.0/va/va.c.orig 2023-09-14 10:04:13.000000000 +0200 ++++ libva-2.20.0/va/va.c 2023-11-14 21:13:59.128325000 +0100 +@@ -370,6 +370,28 @@ + return driver_path; + } + ++#ifdef __MINGW32__ ++static char *getDLLPath() ++{ ++ HMODULE hModule; ++ if (GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, (LPCSTR)&getDLLPath, &hModule)) { ++ char *modulePath = (char *)malloc(MAX_PATH); ++ if (modulePath == NULL) { ++ return NULL; ++ } ++ if (GetModuleFileNameA(hModule, modulePath, MAX_PATH) > 0) { ++ char *lastBackslash = strrchr(modulePath, '\\'); ++ if (lastBackslash) { ++ *lastBackslash = '\0'; ++ return modulePath; ++ } ++ } ++ free(modulePath); ++ } ++ return NULL; ++} ++#endif ++ + static VAStatus va_openDriver(VADisplay dpy, char *driver_name) + { + VADriverContextP ctx = CTX(dpy); +@@ -381,10 +403,21 @@ + if (geteuid() == getuid()) + /* don't allow setuid apps to use LIBVA_DRIVERS_PATH */ + search_path = secure_getenv("LIBVA_DRIVERS_PATH"); ++#ifdef __MINGW32__ ++ if (!search_path) { ++ search_path = getDLLPath(); ++ if (!search_path) { ++ va_errorMessage(dpy, "Failed to detect drivers path\n"); ++ return VA_STATUS_ERROR_OPERATION_FAILED; ++ } ++ } else ++ search_path = strdup((const char *)search_path); ++#else + if (!search_path) + search_path = VA_DRIVERS_PATH; + + search_path = strdup((const char *)search_path); ++#endif + if (!search_path) { + va_errorMessage(dpy, "%s L%d Out of memory\n", + __FUNCTION__, __LINE__); diff --git a/mingw-w64-libva/PKGBUILD b/mingw-w64-libva/PKGBUILD index 487503e5b6eef..b02e97acb55fc 100644 --- a/mingw-w64-libva/PKGBUILD +++ b/mingw-w64-libva/PKGBUILD @@ -4,7 +4,7 @@ _realname=libva pkgbase=mingw-w64-${_realname} pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}") pkgver=2.20.0 -pkgrel=1 +pkgrel=2 pkgdesc='Video Acceleration (VA) API (mingw-w64)' arch=('any') mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64' 'clang32' 'clangarm64') @@ -13,11 +13,15 @@ license=('spdx:MIT') makedepends=("${MINGW_PACKAGE_PREFIX}-meson" "${MINGW_PACKAGE_PREFIX}-ninja" "${MINGW_PACKAGE_PREFIX}-cc") -source=("${_realname}-${pkgver}.tar.gz::https://github.com/intel/libva/archive/refs/tags/${pkgver}.tar.gz") -sha256sums=('117f8d658a5fc9ea406ca80a3eb4ae1d70b15a54807c9ed77199c812bed73b60') +source=("${_realname}-${pkgver}.tar.gz::https://github.com/intel/libva/archive/refs/tags/${pkgver}.tar.gz" + "0001-libva-add-driver-path-relocation.patch") +sha256sums=('117f8d658a5fc9ea406ca80a3eb4ae1d70b15a54807c9ed77199c812bed73b60' + '1cc40ae0b25f462fa0cb4c4717ea7728e8ff0d83c13197035525ff76c0947ad3') prepare() { cd "${srcdir}"/${_realname}-${pkgver} + + patch -Np1 -i "${srcdir}/0001-libva-add-driver-path-relocation.patch" } build() {