From 14b1af9e1adb134c7539746f250a15d06beed1e4 Mon Sep 17 00:00:00 2001 From: libretroadmin Date: Wed, 11 Sep 2024 19:17:20 +0200 Subject: [PATCH] Revert "Start reducing size of video_shader_pass struct to reduce" This reverts commit 0ab10f73c29f25a7e4763accfdf80ffd61208803. --- gfx/drivers/d3d10.c | 4 ++-- gfx/drivers/d3d11.c | 4 ++-- gfx/drivers/d3d12.c | 4 ++-- gfx/drivers/gx2_gfx.c | 2 +- gfx/drivers/metal.m | 4 ++-- gfx/drivers_shader/shader_gl3.cpp | 2 +- gfx/drivers_shader/shader_gl_cg.c | 11 +++++++---- gfx/drivers_shader/shader_glsl.c | 18 +++++++++--------- gfx/drivers_shader/shader_vulkan.cpp | 2 +- gfx/drivers_shader/slang_process.cpp | 4 +--- gfx/video_shader_parse.c | 19 +++++-------------- gfx/video_shader_parse.h | 14 +++++--------- 12 files changed, 38 insertions(+), 50 deletions(-) diff --git a/gfx/drivers/d3d10.c b/gfx/drivers/d3d10.c index 1945198dae0..8e721c944d9 100644 --- a/gfx/drivers/d3d10.c +++ b/gfx/drivers/d3d10.c @@ -2127,7 +2127,7 @@ static void d3d10_init_render_targets(d3d10_video_t* d3d10, d3d10_release_texture(&d3d10->pass[i].rt); d3d10_init_texture(d3d10->device, &d3d10->pass[i].rt); - if ((pass->flags & SHDR_PASS_FLG_FEEDBACK) > 0) + if (pass->feedback) { d3d10->pass[i].feedback.desc = d3d10->pass[i].rt.desc; d3d10_release_texture(&d3d10->pass[i].feedback); @@ -2302,7 +2302,7 @@ static bool d3d10_gfx_frame( { for (i = 0; i < d3d10->shader_preset->passes; i++) { - if ((d3d10->shader_preset->pass[i].flags & SHDR_PASS_FLG_FEEDBACK) > 0) + if (d3d10->shader_preset->pass[i].feedback) { d3d10_texture_t tmp = d3d10->pass[i].feedback; d3d10->pass[i].feedback = d3d10->pass[i].rt; diff --git a/gfx/drivers/d3d11.c b/gfx/drivers/d3d11.c index 724eee80110..5209152dc5d 100644 --- a/gfx/drivers/d3d11.c +++ b/gfx/drivers/d3d11.c @@ -2751,7 +2751,7 @@ static void d3d11_init_render_targets(d3d11_video_t* d3d11, unsigned width, unsi d3d11_release_texture(&d3d11->pass[i].rt); d3d11_init_texture(d3d11->device, &d3d11->pass[i].rt); - if ((pass->flags & SHDR_PASS_FLG_FEEDBACK) > 0) + if (pass->feedback) { d3d11->pass[i].feedback.desc = d3d11->pass[i].rt.desc; d3d11_release_texture(&d3d11->pass[i].feedback); @@ -3060,7 +3060,7 @@ static bool d3d11_gfx_frame( { for (i = 0; i < d3d11->shader_preset->passes; i++) { - if ((d3d11->shader_preset->pass[i].flags & SHDR_PASS_FLG_FEEDBACK) > 0) + if (d3d11->shader_preset->pass[i].feedback) { d3d11_texture_t tmp = d3d11->pass[i].feedback; d3d11->pass[i].feedback = d3d11->pass[i].rt; diff --git a/gfx/drivers/d3d12.c b/gfx/drivers/d3d12.c index c9cdb1adb1b..fbad25c4cb5 100644 --- a/gfx/drivers/d3d12.c +++ b/gfx/drivers/d3d12.c @@ -3169,7 +3169,7 @@ static void d3d12_init_render_targets(d3d12_video_t* d3d12, unsigned width, unsi d3d12_release_texture(&d3d12->pass[i].rt); d3d12_init_texture(d3d12->device, &d3d12->pass[i].rt); - if ((pass->flags & SHDR_PASS_FLG_FEEDBACK) > 0) + if (pass->feedback) { d3d12->pass[i].feedback.desc = d3d12->pass[i].rt.desc; d3d12->pass[i].feedback.srv_heap = &d3d12->desc.srv_heap; @@ -3566,7 +3566,7 @@ static bool d3d12_gfx_frame( for (i = 0; i < d3d12->shader_preset->passes; i++) { - if ((d3d12->shader_preset->pass[i].flags & SHDR_PASS_FLG_FEEDBACK) > 0) + if (d3d12->shader_preset->pass[i].feedback) { d3d12_texture_t tmp = d3d12->pass[i].feedback; d3d12->pass[i].feedback = d3d12->pass[i].rt; diff --git a/gfx/drivers/gx2_gfx.c b/gfx/drivers/gx2_gfx.c index 9994377613e..b144532b50e 100644 --- a/gfx/drivers/gx2_gfx.c +++ b/gfx/drivers/gx2_gfx.c @@ -1777,7 +1777,7 @@ static void gx2_update_uniform_block(wiiu_video_t *wiiu, continue; } - /* FEEDBACK not supported yet */ + /* feedback not supported yet */ if (!strncmp(id, "PassFeedbackSize", STRLEN_CONST("PassFeedbackSize"))) { GX2Surface *output; diff --git a/gfx/drivers/metal.m b/gfx/drivers/metal.m index 50aceba669e..25846b5062c 100644 --- a/gfx/drivers/metal.m +++ b/gfx/drivers/metal.m @@ -1530,7 +1530,7 @@ - (void)drawWithContext:(Context *)ctx for (i = 0; i < _shader->passes; i++) { - if (_shader->pass[i].flags & SHDR_PASS_FLG_FEEDBACK) + if (_shader->pass[i].feedback) { texture_t tmp = _engine.pass[i].feedback; _engine.pass[i].feedback = _engine.pass[i].rt; @@ -1733,7 +1733,7 @@ - (void)_updateRenderTargets [self _initTexture:&_engine.pass[i].rt withDescriptor:td]; - if ((shader_pass->flags & SHDR_PASS_FLG_FEEDBACK) > 0) + if (shader_pass->feedback) [self _initTexture:&_engine.pass[i].feedback withDescriptor:td]; } else diff --git a/gfx/drivers_shader/shader_gl3.cpp b/gfx/drivers_shader/shader_gl3.cpp index 954677303ad..2038b66fe21 100644 --- a/gfx/drivers_shader/shader_gl3.cpp +++ b/gfx/drivers_shader/shader_gl3.cpp @@ -2512,7 +2512,7 @@ gl3_filter_chain_t *gl3_filter_chain_create_from_preset( * CGP format is a bit awkward in that it uses mipmap_input, * so we much check if next pass needs the mipmapping. */ - if (next_pass && ((next_pass->flags & SHDR_PASS_FLG_MIPMAP) > 0)) + if (next_pass && next_pass->mipmap) pass_info.max_levels = ~0u; pass_info.mip_filter = pass->filter != RARCH_FILTER_NEAREST && pass_info.max_levels > 1 diff --git a/gfx/drivers_shader/shader_gl_cg.c b/gfx/drivers_shader/shader_gl_cg.c index d50a00fb670..57c54360bf7 100644 --- a/gfx/drivers_shader/shader_gl_cg.c +++ b/gfx/drivers_shader/shader_gl_cg.c @@ -365,7 +365,7 @@ static void gl_cg_set_params(void *dat, void *shader_data) set_param_2f(cg->prg[cg->active_idx].tex_size_v, tex_width, tex_height); set_param_2f(cg->prg[cg->active_idx].out_size_v, out_width, out_height); - if ( cg->prg[cg->active_idx].frame_cnt_f || + if ( cg->prg[cg->active_idx].frame_cnt_f || cg->prg[cg->active_idx].frame_cnt_v) { unsigned modulo = cg->shader->pass[cg->active_idx - 1].frame_count_mod; @@ -1056,11 +1056,14 @@ static unsigned gl_cg_num(void *data) static bool gl_cg_filter_type(void *data, unsigned idx, bool *smooth) { cg_shader_data_t *cg = (cg_shader_data_t*)data; - if (cg && idx && (cg->shader->pass[idx - 1].filter != RARCH_FILTER_UNSPEC)) + if (cg && idx && + (cg->shader->pass[idx - 1].filter != RARCH_FILTER_UNSPEC) + ) { *smooth = (cg->shader->pass[idx - 1].filter == RARCH_FILTER_LINEAR); return true; } + return false; } @@ -1111,8 +1114,8 @@ static bool gl_cg_get_feedback_pass(void *data, unsigned *pass) static bool gl_cg_mipmap_input(void *data, unsigned idx) { cg_shader_data_t *cg = (cg_shader_data_t*)data; - if (cg && idx && ((cg->shader->pass[idx - 1].flags & SHDR_PASS_FLG_MIPMAP) > 0)) - return true; + if (cg && idx) + return cg->shader->pass[idx - 1].mipmap; return false; } diff --git a/gfx/drivers_shader/shader_glsl.c b/gfx/drivers_shader/shader_glsl.c index 466a71f32f2..4bc75602262 100644 --- a/gfx/drivers_shader/shader_glsl.c +++ b/gfx/drivers_shader/shader_glsl.c @@ -287,7 +287,7 @@ static const XXH64_hash_t gl_glsl_hash_shader( { XXH64_update(state, source[n], strlen(source[n])); } - + XXH64_hash_t const hash = XXH64_digest(state); XXH64_freeState(state); @@ -417,10 +417,10 @@ static bool gl_glsl_compile_shader(glsl_shader_data_t *glsl, source[2] = glsl->alias_define; source[3] = program; -#if defined(ORBIS) +#if defined(ORBIS) { char save_path[250]; - XXH64_hash_t const hash = + XXH64_hash_t const hash = gl_glsl_hash_shader(source, ARRAY_SIZE(source)); snprintf(save_path, sizeof(save_path), "/data/retroarch/temp/%lx.sb", hash); @@ -468,7 +468,7 @@ static bool gl_glsl_compile_program( struct shader_program_info *program_info) { glsl_shader_data_t *glsl = (glsl_shader_data_t*)data; - struct shader_program_glsl_data *program = + struct shader_program_glsl_data *program = (struct shader_program_glsl_data*)program_data; GLuint prog = glCreateProgram(); @@ -1112,7 +1112,7 @@ static void *gl_glsl_init(void *data, const char *path) goto error; } #else - if ( glsl_core + if ( glsl_core && (!(glsl->shader->flags & SHDR_FLAG_MODERN))) { RARCH_ERR("[GL]: GL core context is used, but shader is not core compatible. Cannot use it.\n"); @@ -1545,7 +1545,7 @@ static bool gl_glsl_set_mvp(void *shader_data, const void *mat_data) int loc; glsl_shader_data_t *glsl = (glsl_shader_data_t*)shader_data; - if ( !glsl + if ( !glsl || (!(glsl->shader->flags & SHDR_FLAG_MODERN))) return false; @@ -1589,7 +1589,7 @@ static bool gl_glsl_set_coords(void *shader_data, const struct shader_uniforms *uni = glsl ? &glsl->uniforms[glsl->active_idx] : NULL; - if ( !glsl + if ( !glsl || (!(glsl->shader->flags & SHDR_FLAG_MODERN)) || !coords) { @@ -1744,8 +1744,8 @@ static unsigned gl_glsl_get_prev_textures(void *data) static bool gl_glsl_mipmap_input(void *data, unsigned idx) { glsl_shader_data_t *glsl = (glsl_shader_data_t*)data; - if (glsl && idx && (glsl->shader->pass[idx - 1].flags & SHDR_PASS_FLG_MIPMAP) > 0) - return true; + if (glsl && idx) + return glsl->shader->pass[idx - 1].mipmap; return false; } diff --git a/gfx/drivers_shader/shader_vulkan.cpp b/gfx/drivers_shader/shader_vulkan.cpp index b84f3a0561f..0e4b5ae7360 100644 --- a/gfx/drivers_shader/shader_vulkan.cpp +++ b/gfx/drivers_shader/shader_vulkan.cpp @@ -2930,7 +2930,7 @@ vulkan_filter_chain_t *vulkan_filter_chain_create_from_preset( * Preset format is a bit awkward in that it uses mipmap_input, * so we must check if next pass needs the mipmapping. */ - if (next_pass && ((next_pass->flags & SHDR_PASS_FLG_MIPMAP) > 0)) + if (next_pass && next_pass->mipmap) pass_info.max_levels = ~0u; pass_info.mip_filter = diff --git a/gfx/drivers_shader/slang_process.cpp b/gfx/drivers_shader/slang_process.cpp index b720ce8d58e..f06536697d4 100644 --- a/gfx/drivers_shader/slang_process.cpp +++ b/gfx/drivers_shader/slang_process.cpp @@ -254,9 +254,7 @@ static bool slang_process_reflection( textures.push_back(texture); if (semantic == SLANG_TEXTURE_SEMANTIC_PASS_FEEDBACK) - shader_info->pass[index].flags |= SHDR_PASS_FLG_FEEDBACK; - else - shader_info->pass[index].flags &= ~SHDR_PASS_FLG_FEEDBACK; + shader_info->pass[index].feedback = true; if (semantic == SLANG_TEXTURE_SEMANTIC_ORIGINAL_HISTORY && (unsigned)shader_info->history_size < index) diff --git a/gfx/video_shader_parse.c b/gfx/video_shader_parse.c index 91351e9cebb..ceb2569b083 100644 --- a/gfx/video_shader_parse.c +++ b/gfx/video_shader_parse.c @@ -648,12 +648,7 @@ static bool video_shader_parse_pass(config_file_t *conf, _len = strlcpy(shader_var, "mipmap_input", sizeof(shader_var)); strlcpy(shader_var + _len, formatted_num, sizeof(shader_var) - _len); if (config_get_bool(conf, shader_var, &tmp_bool)) - { - if (tmp_bool) - pass->flags |= SHDR_PASS_FLG_MIPMAP; - else - pass->flags &= ~SHDR_PASS_FLG_MIPMAP; - } + pass->mipmap = tmp_bool; _len = strlcpy(shader_var, "alias", sizeof(shader_var)); strlcpy(shader_var + _len, formatted_num, sizeof(shader_var) - _len); @@ -1201,7 +1196,7 @@ static bool video_shader_write_root_preset(const struct video_shader *shader, _len = strlcpy(key, "mipmap_input", sizeof(key)); strlcpy(key + _len, formatted_num, sizeof(key) - _len); - config_set_string(conf, key, ((pass->flags & SHDR_PASS_FLG_MIPMAP) > 0) ? "true" : "false"); + config_set_string(conf, key, pass->mipmap ? "true" : "false"); _len = strlcpy(key, "alias", sizeof(key)); strlcpy(key + _len, formatted_num, sizeof(key) - _len); @@ -1729,16 +1724,12 @@ static bool video_shader_write_referenced_preset( continue_saving_ref = false; } + if (continue_saving_ref && pass->mipmap != root_pass->mipmap) { - bool pass_mipmap = (pass->flags & SHDR_PASS_FLG_MIPMAP) > 0; - bool root_pass_mipmap = (root_pass->flags & SHDR_PASS_FLG_MIPMAP) > 0; - if (continue_saving_ref && pass_mipmap != root_pass_mipmap) - { #ifdef DEBUG - RARCH_WARN("[Shaders]: Pass %u mipmap", i); + RARCH_WARN("[Shaders]: Pass %u mipmap", i); #endif - continue_saving_ref = false; - } + continue_saving_ref = false; } if (continue_saving_ref && !string_is_equal(pass->alias, root_pass->alias)) diff --git a/gfx/video_shader_parse.h b/gfx/video_shader_parse.h index a52ed2f4fa0..ce917374358 100644 --- a/gfx/video_shader_parse.h +++ b/gfx/video_shader_parse.h @@ -85,8 +85,9 @@ enum enum video_shader_flags { SHDR_FLAG_MODERN = (1 << 0), /* Only used for XML shaders. */ - SHDR_FLAG_MODIFIED = (1 << 1), /* Indicative of whether shader was modified - - * for instance from the menus */ + /* Indicative of whether shader was modified - + * for instance from the menus */ + SHDR_FLAG_MODIFIED = (1 << 1), SHDR_FLAG_DISABLED = (1 << 2) }; @@ -140,12 +141,6 @@ struct rarch_dir_shader_list bool remember_last_preset_dir; }; -enum video_shader_pass_flags -{ - SHDR_PASS_FLG_MIPMAP = (1 << 0), - SHDR_PASS_FLG_FEEDBACK = (1 << 1) -}; - struct video_shader_pass { struct gfx_fbo_scale fbo; /* unsigned alignment */ @@ -162,7 +157,8 @@ struct video_shader_pass char path[NAME_MAX_LENGTH*2]; } source; char alias[64]; - uint8_t flags; + bool mipmap; + bool feedback; }; struct video_shader_lut