diff --git a/list_special.c b/list_special.c index 6063450223..4328d8b71f 100644 --- a/list_special.c +++ b/list_special.c @@ -89,10 +89,16 @@ struct string_list *dir_list_new_special(const char *input_dir, strlcat(ext_shaders, "cg|cgp", sizeof(ext_shaders)); #endif #ifdef HAVE_GLSL - strlcat(ext_shaders, "glsl|glslp", sizeof(ext_shaders)); + if (strstr(ext_shaders, "cg|cgp")) + strlcat(ext_shaders, "|glsl|glslp", sizeof(ext_shaders)); + else + strlcat(ext_shaders, "glsl|glslp", sizeof(ext_shaders)); #endif #ifdef HAVE_VULKAN - strlcat(ext_shaders, "slang|slangp", sizeof(ext_shaders)); + if (strstr(ext_shaders, "cg|cgp") || strstr(ext_shaders, "glsl|glslp")) + strlcat(ext_shaders, "|slang|slangp", sizeof(ext_shaders)); + else + strlcat(ext_shaders, "slang|slangp", sizeof(ext_shaders)); #endif exts = ext_shaders; break; diff --git a/runloop.c b/runloop.c index 2df08a80b3..13512c2a80 100644 --- a/runloop.c +++ b/runloop.c @@ -504,10 +504,13 @@ static bool shader_dir_init(rarch_dir_list_t *dir_list) static void runloop_check_shader_dir(rarch_dir_list_t *dir_list, bool pressed_next, bool pressed_prev) { + char msg[128] = {0}; const char *shader = NULL; enum rarch_shader_type type = RARCH_SHADER_NONE; + RARCH_LOG("SWITCH \n"); + if (!dir_list || !dir_list->list) return; @@ -527,6 +530,7 @@ static void runloop_check_shader_dir(rarch_dir_list_t *dir_list, return; shader = dir_list->list->elems[dir_list->ptr].data; + RARCH_LOG("SWITCH %s,\n", shader); switch (msg_hash_to_file_type(msg_hash_calculate(path_get_extension(shader)))) { @@ -701,10 +705,14 @@ static bool runloop_check_state(event_cmd_state_t *cmd, if (runloop_cmd_triggered(cmd, RARCH_MOVIE_RECORD_TOGGLE)) runloop_check_movie(); - - runloop_check_shader_dir(shader_dir, - runloop_cmd_triggered(cmd, RARCH_SHADER_NEXT), - runloop_cmd_triggered(cmd, RARCH_SHADER_PREV)); + + if (runloop_cmd_triggered(cmd, RARCH_SHADER_NEXT) || + runloop_cmd_triggered(cmd, RARCH_SHADER_PREV)) + { + runloop_check_shader_dir(shader_dir, + runloop_cmd_triggered(cmd, RARCH_SHADER_NEXT), + runloop_cmd_triggered(cmd, RARCH_SHADER_PREV)); + } if (runloop_cmd_triggered(cmd, RARCH_DISK_EJECT_TOGGLE)) command_event(CMD_EVENT_DISK_EJECT_TOGGLE, NULL);