diff --git a/retroarch.c b/retroarch.c
index ea26dc3310..65c0707c8e 100644
--- a/retroarch.c
+++ b/retroarch.c
@@ -36011,13 +36011,13 @@ bool retroarch_is_switching_display_mode(void)
 
 #if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_SLANG) || defined(HAVE_HLSL)
 static bool retroarch_load_shader_preset_internal(
-      struct rarch_state *p_rarch,
+      char *s,
+      size_t len,
       const char *shader_directory,
       const char *core_name,
       const char *special_name)
 {
    unsigned i;
-   char shader_path[PATH_MAX_LENGTH];
 
    static enum rarch_shader_type types[] =
    {
@@ -36033,34 +36033,22 @@ static bool retroarch_load_shader_preset_internal(
 
       /* Concatenate strings into full paths */
       if (!string_is_empty(core_name))
-         fill_pathname_join_special_ext(shader_path,
+         fill_pathname_join_special_ext(s,
                shader_directory, core_name,
                special_name,
                video_shader_get_preset_extension(types[i]),
-               sizeof(shader_path));
+               len);
       else
       {
          if (string_is_empty(special_name))
             break;
 
-         fill_pathname_join(shader_path, shader_directory,
-               special_name, sizeof(shader_path));
-         strlcat(shader_path,
-               video_shader_get_preset_extension(types[i]),
-               sizeof(shader_path));
+         fill_pathname_join(s, shader_directory, special_name, len);
+         strlcat(s, video_shader_get_preset_extension(types[i]), len);
       }
 
-      if (!path_is_valid(shader_path))
-         continue;
-
-      /* Shader preset exists, load it. */
-      RARCH_LOG("[Shaders]: Specific shader preset found at %s.\n",
-            shader_path);
-      strlcpy(
-            p_rarch->runtime_shader_preset,
-            shader_path,
-            sizeof(p_rarch->runtime_shader_preset));
-      return true;
+      if (path_is_valid(s))
+         return true;
    }
 
    return false;
@@ -36088,9 +36076,9 @@ static bool retroarch_load_shader_preset_internal(
  *
  * Returns: false if there was an error or no action was performed.
  */
-static bool retroarch_load_shader_preset(struct rarch_state *p_rarch)
+static bool retroarch_load_shader_preset(struct rarch_state *p_rarch,
+      settings_t *settings)
 {
-   settings_t *settings               = p_rarch->configuration_settings;
    const char *video_shader_directory = settings->paths.directory_video_shader;
    const char *menu_config_directory  = settings->paths.directory_menu_config;
    const char *core_name              = 
@@ -36101,10 +36089,12 @@ static bool retroarch_load_shader_preset(struct rarch_state *p_rarch)
    const char *dirs[3]                = {0};
    size_t i                           = 0;
 
+   char shader_path[PATH_MAX_LENGTH];
    char content_dir_name[PATH_MAX_LENGTH];
    char config_file_directory[PATH_MAX_LENGTH];
    char old_presets_directory[PATH_MAX_LENGTH];
 
+   shader_path[0]                     = '\0';
    content_dir_name[0]                = '\0';
    config_file_directory[0]           = '\0';
    old_presets_directory[0]           = '\0';
@@ -36134,27 +36124,45 @@ static bool retroarch_load_shader_preset(struct rarch_state *p_rarch)
       if (string_is_empty(dirs[i]))
          continue;
       /* Game-specific shader preset found? */
-      if (retroarch_load_shader_preset_internal(p_rarch,
-            dirs[i], core_name,
-            game_name))
-         return true;
-      /* Folder-specifici shader preset found? */
-      if (retroarch_load_shader_preset_internal(p_rarch,
-            dirs[i], core_name,
-            content_dir_name))
-         return true;
+      if (retroarch_load_shader_preset_internal(
+               shader_path,
+               sizeof(shader_path),
+               dirs[i], core_name,
+               game_name))
+         goto success;
+      /* Folder-specific shader preset found? */
+      if (retroarch_load_shader_preset_internal(
+               shader_path,
+               sizeof(shader_path),
+               dirs[i], core_name,
+               content_dir_name))
+         goto success;
       /* Core-specific shader preset found? */
-      if (retroarch_load_shader_preset_internal(p_rarch,
-            dirs[i], core_name,
-            core_name))
-         return true;
+      if (retroarch_load_shader_preset_internal(
+               shader_path,
+               sizeof(shader_path),
+               dirs[i], core_name,
+               core_name))
+         goto success;
       /* Global shader preset found? */
-      if (retroarch_load_shader_preset_internal(p_rarch,
-            dirs[i], NULL,
-            "global"))
-         return true;
+      if (retroarch_load_shader_preset_internal(
+               shader_path,
+               sizeof(shader_path),
+               dirs[i], NULL,
+               "global"))
+         goto success;
    }
    return false;
+
+success:
+   /* Shader preset exists, load it. */
+   RARCH_LOG("[Shaders]: Specific shader preset found at %s.\n",
+         shader_path);
+   strlcpy(
+         p_rarch->runtime_shader_preset,
+         shader_path,
+         sizeof(p_rarch->runtime_shader_preset));
+   return true;
 }
 #endif
 
@@ -36193,7 +36201,7 @@ const char *retroarch_get_shader_preset(void)
                sizeof(p_rarch->runtime_shader_preset));
       else
          if (auto_shaders_enable) /* sets runtime_shader_preset */
-            retroarch_load_shader_preset(p_rarch); 
+            retroarch_load_shader_preset(p_rarch, settings); 
       return p_rarch->runtime_shader_preset;
    }
 #endif