shader code - Get rid of more hashes

This commit is contained in:
twinaphex 2018-02-25 17:20:22 +01:00
parent f00d194ae3
commit 74309e6e1c
5 changed files with 148 additions and 127 deletions

View File

@ -219,26 +219,13 @@ static bool command_reply(const char * data, size_t len)
bool command_set_shader(const char *arg)
{
char msg[256];
enum rarch_shader_type type = RARCH_SHADER_NONE;
struct video_shader *shader = menu_shader_get();
bool is_preset = false;
struct video_shader *shader = menu_shader_get();
enum rarch_shader_type type = video_shader_get_type_from_ext(
path_get_extension(arg), &is_preset);
switch (msg_hash_to_file_type(msg_hash_calculate(path_get_extension(arg))))
{
case FILE_TYPE_SHADER_GLSL:
case FILE_TYPE_SHADER_PRESET_GLSLP:
type = RARCH_SHADER_GLSL;
break;
case FILE_TYPE_SHADER_CG:
case FILE_TYPE_SHADER_PRESET_CGP:
type = RARCH_SHADER_CG;
break;
case FILE_TYPE_SHADER_SLANG:
case FILE_TYPE_SHADER_PRESET_SLANGP:
type = RARCH_SHADER_SLANG;
break;
default:
return false;
}
if (type == RARCH_SHADER_NONE)
return false;
snprintf(msg, sizeof(msg), "Shader: \"%s\"", arg);
runloop_msg_queue_push(msg, 1, 120, true);

View File

@ -1062,6 +1062,56 @@ void video_shader_write_conf_cgp(config_file_t *conf,
}
}
bool video_shader_is_supported(enum rarch_shader_type type)
{
#ifdef HAVE_SLANG
if (type == RARCH_SHADER_SLANG)
return true;
#endif
#ifdef HAVE_GLSL
if (type == RARCH_SHADER_GLSL)
return true;
#endif
#ifdef HAVE_HLSL
if (type == RARCH_SHADER_HLSL)
return true;
#endif
#ifdef HAVE_CG
if (type == RARCH_SHADER_CG)
return true;
#endif
return false;
}
enum rarch_shader_type video_shader_get_type_from_ext(
const char *ext, bool *is_preset)
{
*is_preset = false;
if (string_is_equal_noncase(ext, "cg"))
return RARCH_SHADER_CG;
if (string_is_equal_noncase(ext, "cgp"))
{
*is_preset = true;
return RARCH_SHADER_CG;
}
if (string_is_equal_noncase(ext, "glsl"))
return RARCH_SHADER_GLSL;
if (string_is_equal_noncase(ext, "glslp"))
{
*is_preset = true;
return RARCH_SHADER_GLSL;
}
if (string_is_equal_noncase(ext, "slang"))
return RARCH_SHADER_SLANG;
if (string_is_equal_noncase(ext, "slangp"))
{
*is_preset = true;
return RARCH_SHADER_SLANG;
}
return RARCH_SHADER_NONE;
}
/**
* video_shader_parse_type:
* @path : Shader path.
@ -1076,35 +1126,17 @@ void video_shader_write_conf_cgp(config_file_t *conf,
enum rarch_shader_type video_shader_parse_type(const char *path,
enum rarch_shader_type fallback)
{
bool is_preset = false;
enum rarch_shader_type shader_type = RARCH_SHADER_NONE;
enum gfx_ctx_api api = video_context_driver_get_api();
#ifdef HAVE_CG
bool cg_supported = true;
#else
bool cg_supported = false;
#endif
bool cg_supported = video_shader_is_supported(RARCH_SHADER_CG);
const char *ext = NULL;
if (!path)
return fallback;
ext = path_get_extension(path);
if (
string_is_equal_noncase(ext, "cg") ||
string_is_equal_noncase(ext, "cgp")
)
shader_type = RARCH_SHADER_CG;
else if (
string_is_equal_noncase(ext, "glsl") ||
string_is_equal_noncase(ext, "glslp")
)
shader_type = RARCH_SHADER_GLSL;
else if (
string_is_equal_noncase(ext, "slang") ||
string_is_equal_noncase(ext, "slangp")
)
shader_type = RARCH_SHADER_SLANG;
shader_type = video_shader_get_type_from_ext(ext, &is_preset);
switch (api)
{

View File

@ -239,6 +239,11 @@ bool video_shader_resolve_parameters(config_file_t *conf,
enum rarch_shader_type video_shader_parse_type(const char *path,
enum rarch_shader_type fallback);
enum rarch_shader_type video_shader_get_type_from_ext(
const char *ext, bool *is_preset);
bool video_shader_is_supported(enum rarch_shader_type type);
bool video_shader_check_for_changes(void);
RETRO_END_DECLS

View File

@ -104,12 +104,6 @@ void menu_shader_manager_increment_amount_passes(void)
shader->passes++;
}
void menu_shader_manager_free(void)
{
if (menu_driver_shader)
free(menu_driver_shader);
menu_driver_shader = NULL;
}
#else
struct video_shader *menu_shader_get(void)
{
@ -127,9 +121,15 @@ struct video_shader_pass *menu_shader_manager_get_pass(unsigned i)
}
unsigned menu_shader_manager_get_amount_passes(void) { return 0; }
void menu_shader_manager_free(void) { }
#endif
void menu_shader_manager_free(void)
{
if (menu_driver_shader)
free(menu_driver_shader);
menu_driver_shader = NULL;
}
void menu_shader_manager_init_paths(void)
{
const char *config_path = path_get(RARCH_PATH_CONFIG);
@ -177,9 +177,12 @@ void menu_shader_manager_init_paths(void)
**/
bool menu_shader_manager_init(void)
{
#ifdef HAVE_SHADER_MANAGER
bool is_preset = false;
config_file_t *conf = NULL;
settings_t *settings = config_get_ptr();
char *new_path = NULL;
const char *path_shader = retroarch_get_shader_preset();
enum rarch_shader_type type = RARCH_SHADER_NONE;
menu_shader_manager_free();
@ -191,76 +194,68 @@ bool menu_shader_manager_init(void)
menu_shader_manager_init_paths();
switch (msg_hash_to_file_type(msg_hash_calculate(
path_get_extension(path_shader))))
{
case FILE_TYPE_SHADER_PRESET_GLSLP:
case FILE_TYPE_SHADER_PRESET_CGP:
case FILE_TYPE_SHADER_PRESET_SLANGP:
{
config_file_t *conf = config_file_new(path_shader);
type = video_shader_get_type_from_ext(path_get_extension(path_shader),
&is_preset);
if (conf)
{
if (video_shader_read_conf_cgp(conf, menu_driver_shader))
{
video_shader_resolve_relative(menu_driver_shader,
path_shader);
video_shader_resolve_parameters(conf, menu_driver_shader);
}
config_file_free(conf);
}
}
break;
case FILE_TYPE_SHADER_GLSL:
case FILE_TYPE_SHADER_CG:
case FILE_TYPE_SHADER_SLANG:
if (is_preset)
{
conf = config_file_new(path_shader);
new_path = strdup(path_shader);
}
else
{
if (video_shader_is_supported(type))
{
strlcpy(menu_driver_shader->pass[0].source.path, path_shader,
sizeof(menu_driver_shader->pass[0].source.path));
menu_driver_shader->passes = 1;
break;
default:
}
else
{
char preset_path[PATH_MAX_LENGTH];
config_file_t *conf = NULL;
const char *shader_dir =
*settings->paths.directory_video_shader ?
settings->paths.directory_video_shader :
settings->paths.directory_system;
preset_path[0] = '\0';
fill_pathname_join(preset_path, shader_dir,
"menu.glslp", sizeof(preset_path));
conf = config_file_new(preset_path);
if (!conf)
{
char preset_path[PATH_MAX_LENGTH];
config_file_t *conf = NULL;
const char *shader_dir =
*settings->paths.directory_video_shader ?
settings->paths.directory_video_shader :
settings->paths.directory_system;
preset_path[0] = '\0';
fill_pathname_join(preset_path, shader_dir,
"menu.glslp", sizeof(preset_path));
"menu.cgp", sizeof(preset_path));
conf = config_file_new(preset_path);
if (!conf)
{
fill_pathname_join(preset_path, shader_dir,
"menu.cgp", sizeof(preset_path));
conf = config_file_new(preset_path);
}
if (!conf)
{
fill_pathname_join(preset_path, shader_dir,
"menu.slangp", sizeof(preset_path));
conf = config_file_new(preset_path);
}
if (conf)
{
if (video_shader_read_conf_cgp(conf, menu_driver_shader))
{
video_shader_resolve_relative(menu_driver_shader, preset_path);
video_shader_resolve_parameters(conf, menu_driver_shader);
}
config_file_free(conf);
}
}
break;
if (!conf)
{
fill_pathname_join(preset_path, shader_dir,
"menu.slangp", sizeof(preset_path));
conf = config_file_new(preset_path);
}
new_path = strdup(preset_path);
}
}
if (!string_is_empty(new_path))
{
if (conf)
{
if (video_shader_read_conf_cgp(conf, menu_driver_shader))
{
video_shader_resolve_relative(menu_driver_shader, new_path);
video_shader_resolve_parameters(conf, menu_driver_shader);
}
config_file_free(conf);
}
free(new_path);
}
#endif
return true;
}
@ -393,25 +388,23 @@ bool menu_shader_manager_save_preset(
else
{
const char *conf_path = NULL;
switch (type)
{
case RARCH_SHADER_GLSL:
#ifdef HAVE_GLSL
conf_path = default_glslp;
#endif
if (video_shader_is_supported(type))
conf_path = default_glslp;
break;
case RARCH_SHADER_SLANG:
#ifdef HAVE_SLANG
conf_path = default_slangp;
#endif
if (video_shader_is_supported(type))
conf_path = default_slangp;
break;
default:
case RARCH_SHADER_CG:
#ifdef HAVE_CG
conf_path = default_cgp;
#endif
if (video_shader_is_supported(type))
conf_path = default_cgp;
break;
}
@ -639,13 +632,15 @@ void menu_shader_manager_apply_changes(void)
if (shader_type == RARCH_SHADER_NONE)
{
#if defined(HAVE_GLSL)
shader_type = RARCH_SHADER_GLSL;
#elif defined(HAVE_CG) || defined(HAVE_HLSL)
shader_type = RARCH_SHADER_CG;
#elif defined(HAVE_SLANG)
shader_type = RARCH_SHADER_SLANG;
#endif
if (video_shader_is_supported(RARCH_SHADER_GLSL))
shader_type = RARCH_SHADER_GLSL;
else if (
video_shader_is_supported(RARCH_SHADER_CG) ||
video_shader_is_supported(RARCH_SHADER_HLSL)
)
shader_type = RARCH_SHADER_CG;
else if (video_shader_is_supported(RARCH_SHADER_SLANG))
shader_type = RARCH_SHADER_SLANG;
}
menu_shader_manager_set_preset(NULL, shader_type, NULL);
#endif

View File

@ -293,10 +293,12 @@ bool task_push_decompress(
/* ZIP or APK only */
if (
!filestream_exists(source_file) ||
!string_is_equal_noncase(ext, "zip")
(
(!string_is_equal_noncase(ext, "zip"))
#ifdef HAVE_7ZIP
&& !string_is_equal_noncase(ext, "7z")
&& (!string_is_equal_noncase(ext, "7z"))
#endif
)
)
{
RARCH_WARN(