Start reducing size of video_shader_pass struct to reduce

massive size of video_shader struct
This commit is contained in:
libretroadmin 2024-09-09 18:28:38 +02:00
parent c79b02b1c8
commit 0ab10f73c2
12 changed files with 50 additions and 38 deletions

View File

@ -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->feedback)
if ((pass->flags & SHDR_PASS_FLG_FEEDBACK) > 0)
{
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].feedback)
if ((d3d10->shader_preset->pass[i].flags & SHDR_PASS_FLG_FEEDBACK) > 0)
{
d3d10_texture_t tmp = d3d10->pass[i].feedback;
d3d10->pass[i].feedback = d3d10->pass[i].rt;

View File

@ -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->feedback)
if ((pass->flags & SHDR_PASS_FLG_FEEDBACK) > 0)
{
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].feedback)
if ((d3d11->shader_preset->pass[i].flags & SHDR_PASS_FLG_FEEDBACK) > 0)
{
d3d11_texture_t tmp = d3d11->pass[i].feedback;
d3d11->pass[i].feedback = d3d11->pass[i].rt;

View File

@ -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->feedback)
if ((pass->flags & SHDR_PASS_FLG_FEEDBACK) > 0)
{
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].feedback)
if ((d3d12->shader_preset->pass[i].flags & SHDR_PASS_FLG_FEEDBACK) > 0)
{
d3d12_texture_t tmp = d3d12->pass[i].feedback;
d3d12->pass[i].feedback = d3d12->pass[i].rt;

View File

@ -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;

View File

@ -1530,7 +1530,7 @@ typedef struct MTLALIGN(16)
for (i = 0; i < _shader->passes; i++)
{
if (_shader->pass[i].feedback)
if (_shader->pass[i].flags & SHDR_PASS_FLG_FEEDBACK)
{
texture_t tmp = _engine.pass[i].feedback;
_engine.pass[i].feedback = _engine.pass[i].rt;
@ -1733,7 +1733,7 @@ typedef struct MTLALIGN(16)
[self _initTexture:&_engine.pass[i].rt withDescriptor:td];
if (shader_pass->feedback)
if ((shader_pass->flags & SHDR_PASS_FLG_FEEDBACK) > 0)
[self _initTexture:&_engine.pass[i].feedback withDescriptor:td];
}
else

View File

@ -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->mipmap)
if (next_pass && ((next_pass->flags & SHDR_PASS_FLG_MIPMAP) > 0))
pass_info.max_levels = ~0u;
pass_info.mip_filter = pass->filter != RARCH_FILTER_NEAREST && pass_info.max_levels > 1

View File

@ -1056,14 +1056,11 @@ 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;
}
@ -1114,8 +1111,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)
return cg->shader->pass[idx - 1].mipmap;
if (cg && idx && ((cg->shader->pass[idx - 1].flags & SHDR_PASS_FLG_MIPMAP) > 0))
return true;
return false;
}

View File

@ -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)
return glsl->shader->pass[idx - 1].mipmap;
if (glsl && idx && (glsl->shader->pass[idx - 1].flags & SHDR_PASS_FLG_MIPMAP) > 0)
return true;
return false;
}

View File

@ -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->mipmap)
if (next_pass && ((next_pass->flags & SHDR_PASS_FLG_MIPMAP) > 0))
pass_info.max_levels = ~0u;
pass_info.mip_filter =

View File

@ -254,7 +254,9 @@ static bool slang_process_reflection(
textures.push_back(texture);
if (semantic == SLANG_TEXTURE_SEMANTIC_PASS_FEEDBACK)
shader_info->pass[index].feedback = true;
shader_info->pass[index].flags |= SHDR_PASS_FLG_FEEDBACK;
else
shader_info->pass[index].flags &= ~SHDR_PASS_FLG_FEEDBACK;
if (semantic == SLANG_TEXTURE_SEMANTIC_ORIGINAL_HISTORY &&
(unsigned)shader_info->history_size < index)

View File

@ -610,7 +610,12 @@ 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))
pass->mipmap = tmp_bool;
{
if (tmp_bool)
pass->flags |= SHDR_PASS_FLG_MIPMAP;
else
pass->flags &= ~SHDR_PASS_FLG_MIPMAP;
}
_len = strlcpy(shader_var, "alias", sizeof(shader_var));
strlcpy(shader_var + _len, formatted_num, sizeof(shader_var) - _len);
@ -1152,7 +1157,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->mipmap ? "true" : "false");
config_set_string(conf, key, ((pass->flags & SHDR_PASS_FLG_MIPMAP) > 0) ? "true" : "false");
_len = strlcpy(key, "alias", sizeof(key));
strlcpy(key + _len, formatted_num, sizeof(key) - _len);
@ -1682,13 +1687,17 @@ 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);
#endif
continue_saving_ref = false;
}
}
if (continue_saving_ref && !string_is_equal(pass->alias, root_pass->alias))
{

View File

@ -104,9 +104,8 @@ enum
enum video_shader_flags
{
SHDR_FLAG_MODERN = (1 << 0), /* Only used for XML shaders. */
/* Indicative of whether shader was modified -
SHDR_FLAG_MODIFIED = (1 << 1), /* Indicative of whether shader was modified -
* for instance from the menus */
SHDR_FLAG_MODIFIED = (1 << 1),
SHDR_FLAG_DISABLED = (1 << 2)
};
@ -160,6 +159,12 @@ 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 */
@ -176,8 +181,7 @@ struct video_shader_pass
char path[PATH_MAX_LENGTH];
} source;
char alias[64];
bool mipmap;
bool feedback;
uint8_t flags;
};
struct video_shader_lut