From 97c87dc82a88e72259531a20ca140757ce07c023 Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Sun, 29 Sep 2024 15:04:02 +0900 Subject: [PATCH] platform: Honor the LIBRETRO_VIDEO_SHADER_DIRECTORY environment variable. * frontend/drivers/platform_unix.c (libretro_video_shader_directory): New variable. (frontend_unix_get_env): Set DEFAULT_DIR_SHADER to the value of the LIBRETRO_VIDEO_SHADER_DIRECTORY environment variable, if available. * frontend/drivers/platform_win32.c: Likewise. --- frontend/drivers/platform_unix.c | 10 ++++++++-- frontend/drivers/platform_win32.c | 12 +++++++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/frontend/drivers/platform_unix.c b/frontend/drivers/platform_unix.c index 0c53efe98f3..ddf0b5ca878 100644 --- a/frontend/drivers/platform_unix.c +++ b/frontend/drivers/platform_unix.c @@ -1327,6 +1327,7 @@ static void frontend_unix_get_env(int *argc, const char* libretro_assets_directory = getenv("LIBRETRO_ASSETS_DIRECTORY"); const char* libretro_autoconfig_directory = getenv("LIBRETRO_AUTOCONFIG_DIRECTORY"); const char* libretro_video_filter_directory = getenv("LIBRETRO_VIDEO_FILTER_DIRECTORY"); + const char* libretro_video_shader_directory = getenv("LIBRETRO_VIDEO_SHADER_DIRECTORY"); #ifdef ANDROID int32_t major, minor, rel; char device_model[PROP_VALUE_MAX] = {0}; @@ -1890,8 +1891,13 @@ static void frontend_unix_get_env(int *argc, "records", sizeof(g_defaults.dirs[DEFAULT_DIR_RECORD_OUTPUT])); fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_DATABASE], base_path, "database/rdb", sizeof(g_defaults.dirs[DEFAULT_DIR_DATABASE])); - fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_SHADER], base_path, - "shaders", sizeof(g_defaults.dirs[DEFAULT_DIR_SHADER])); + if (!string_is_empty(libretro_video_shader_directory)) + strlcpy(g_defaults.dirs[DEFAULT_DIR_SHADER], + libretro_video_shader_directory, + sizeof(g_defaults.dirs[DEFAULT_DIR_SHADER])); + else + fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_SHADER], base_path, + "shaders", sizeof(g_defaults.dirs[DEFAULT_DIR_SHADER])); fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CHEATS], base_path, "cheats", sizeof(g_defaults.dirs[DEFAULT_DIR_CHEATS])); fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_OVERLAY], base_path, diff --git a/frontend/drivers/platform_win32.c b/frontend/drivers/platform_win32.c index fb71193a298..0cc9a9dc958 100644 --- a/frontend/drivers/platform_win32.c +++ b/frontend/drivers/platform_win32.c @@ -568,6 +568,7 @@ static void frontend_win32_env_get(int *argc, char *argv[], const char *libretro_assets_directory = getenv("LIBRETRO_ASSETS_DIRECTORY"); const char* libretro_autoconfig_directory = getenv("LIBRETRO_AUTOCONFIG_DIRECTORY"); const char* libretro_video_filter_directory = getenv("LIBRETRO_VIDEO_FILTER_DIRECTORY"); + const char* libretro_video_shader_directory = getenv("LIBRETRO_VIDEO_SHADER_DIRECTORY"); if (!string_is_empty(tmp_dir)) fill_pathname_expand_special(g_defaults.dirs[DEFAULT_DIR_CACHE], tmp_dir, sizeof(g_defaults.dirs[DEFAULT_DIR_CACHE])); @@ -630,9 +631,14 @@ static void frontend_win32_env_get(int *argc, char *argv[], sizeof(g_defaults.dirs[DEFAULT_DIR_AUTOCONFIG])); else fill_pathname_expand_special(g_defaults.dirs[DEFAULT_DIR_AUTOCONFIG], - ":\\autoconfig", sizeof(g_defaults.dirs[DEFAULT_DIR_AUTOCONFIG])); - fill_pathname_expand_special(g_defaults.dirs[DEFAULT_DIR_SHADER], - ":\\shaders", sizeof(g_defaults.dirs[DEFAULT_DIR_SHADER])); + ":\\autoconfig", sizeof(g_defaults.dirs[DEFAULT_DIR_AUTOCONFIG])); + if (!string_is_empty(libretro_video_filter_directory)) + strlcpy(g_defaults.dirs[DEFAULT_DIR_SHADER], + libretro_video_shader_directory, + sizeof(g_defaults.dirs[DEFAULT_DIR_SHADER])); + else + fill_pathname_expand_special(g_defaults.dirs[DEFAULT_DIR_SHADER], + ":\\shaders", sizeof(g_defaults.dirs[DEFAULT_DIR_SHADER])); fill_pathname_expand_special(g_defaults.dirs[DEFAULT_DIR_CORE_ASSETS], ":\\downloads", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_ASSETS])); fill_pathname_expand_special(g_defaults.dirs[DEFAULT_DIR_SCREENSHOT],