(shader_vulkan.cpp) Get rid of ConfigDeleter

This commit is contained in:
twinaphex 2020-01-22 11:29:40 +01:00
parent f853632260
commit b8cd37aef7
1 changed files with 21 additions and 22 deletions

View File

@ -2660,15 +2660,6 @@ vulkan_filter_chain_t *vulkan_filter_chain_create_default(
return chain.release(); return chain.release();
} }
struct ConfigDeleter
{
void operator()(config_file_t *conf)
{
if (conf)
config_file_free(conf);
}
};
static VkFormat glslang_format_to_vk(glslang_format fmt) static VkFormat glslang_format_to_vk(glslang_format fmt)
{ {
#undef FMT #undef FMT
@ -2719,16 +2710,19 @@ vulkan_filter_chain_t *vulkan_filter_chain_create_from_preset(
const char *path, vulkan_filter_chain_filter filter) const char *path, vulkan_filter_chain_filter filter)
{ {
unsigned i; unsigned i;
config_file_t *conf = NULL;
unique_ptr<video_shader> shader{ new video_shader() }; unique_ptr<video_shader> shader{ new video_shader() };
if (!shader) if (!shader)
return nullptr; return nullptr;
unique_ptr<config_file_t, ConfigDeleter> conf{ video_shader_read_preset(path) }; if (!(conf = video_shader_read_preset(path)))
if (!conf)
return nullptr; return nullptr;
if (!video_shader_read_conf_preset(conf.get(), shader.get())) if (!video_shader_read_conf_preset(conf, shader.get()))
{
config_file_free(conf);
return nullptr; return nullptr;
}
bool last_pass_is_fbo = shader->pass[shader->passes - 1].fbo.valid; bool last_pass_is_fbo = shader->pass[shader->passes - 1].fbo.valid;
auto tmpinfo = *info; auto tmpinfo = *info;
@ -2736,10 +2730,10 @@ vulkan_filter_chain_t *vulkan_filter_chain_create_from_preset(
unique_ptr<vulkan_filter_chain> chain{ new vulkan_filter_chain(tmpinfo) }; unique_ptr<vulkan_filter_chain> chain{ new vulkan_filter_chain(tmpinfo) };
if (!chain) if (!chain)
return nullptr; goto error;
if (shader->luts && !vulkan_filter_chain_load_luts(info, chain.get(), shader.get())) if (shader->luts && !vulkan_filter_chain_load_luts(info, chain.get(), shader.get()))
return nullptr; goto error;
shader->num_parameters = 0; shader->num_parameters = 0;
@ -2765,7 +2759,7 @@ vulkan_filter_chain_t *vulkan_filter_chain_create_from_preset(
{ {
RARCH_ERR("Failed to compile shader: \"%s\".\n", RARCH_ERR("Failed to compile shader: \"%s\".\n",
pass->source.path); pass->source.path);
return nullptr; goto error;
} }
for (auto &meta_param : output.meta.parameters) for (auto &meta_param : output.meta.parameters)
@ -2773,7 +2767,7 @@ vulkan_filter_chain_t *vulkan_filter_chain_create_from_preset(
if (shader->num_parameters >= GFX_MAX_PARAMETERS) if (shader->num_parameters >= GFX_MAX_PARAMETERS)
{ {
RARCH_ERR("[Vulkan]: Exceeded maximum number of parameters.\n"); RARCH_ERR("[Vulkan]: Exceeded maximum number of parameters.\n");
return nullptr; goto error;
} }
auto itr = find_if(shader->parameters, shader->parameters + shader->num_parameters, auto itr = find_if(shader->parameters, shader->parameters + shader->num_parameters,
@ -2794,7 +2788,7 @@ vulkan_filter_chain_t *vulkan_filter_chain_create_from_preset(
{ {
RARCH_ERR("[Vulkan]: Duplicate parameters found for \"%s\", but arguments do not match.\n", RARCH_ERR("[Vulkan]: Duplicate parameters found for \"%s\", but arguments do not match.\n",
itr->id); itr->id);
return nullptr; goto error;
} }
chain->add_parameter(i, itr - shader->parameters, meta_param.id); chain->add_parameter(i, itr - shader->parameters, meta_param.id);
} }
@ -2968,15 +2962,20 @@ vulkan_filter_chain_t *vulkan_filter_chain_create_from_preset(
sizeof(opaque_frag) / sizeof(uint32_t)); sizeof(opaque_frag) / sizeof(uint32_t));
} }
if (!video_shader_resolve_current_parameters(conf.get(), shader.get())) if (!video_shader_resolve_current_parameters(conf, shader.get()))
return nullptr; goto error;
chain->set_shader_preset(move(shader)); chain->set_shader_preset(move(shader));
if (!chain->init()) if (!chain->init())
return nullptr; goto error;
config_file_free(conf);
return chain.release(); return chain.release();
error:
config_file_free(conf);
return nullptr;
} }
struct video_shader *vulkan_filter_chain_get_preset( struct video_shader *vulkan_filter_chain_get_preset(