shader_unset_dirty

This commit is contained in:
jacob 2025-05-23 21:59:38 -05:00
parent 332e8fdf2c
commit ad05469411

View File

@ -153,7 +153,7 @@ struct dx11_shader_desc {
struct arena includes_arena;
struct sys_mutex includes_mutex;
struct dict includes_dict;
struct atomic_i32 should_reload;
struct atomic_i32 is_dirty;
#endif
};
@ -534,7 +534,7 @@ INTERNAL b32 shader_set_dirty(struct string name)
struct dx11_shader_desc *desc = &G.shader_info[i];
struct string desc_name = string_from_cstr_no_limit(desc->name_cstr);
if (string_eq(desc_name, name)) {
atomic_i32_eval_exchange(&desc->should_reload, 1);
atomic_i32_eval_exchange(&desc->is_dirty, 1);
caused_dirty = true;
} else {
struct dict *includes_dict = &desc->includes_dict;
@ -542,7 +542,7 @@ INTERNAL b32 shader_set_dirty(struct string name)
struct sys_lock lock = sys_mutex_lock_e(&desc->includes_mutex);
{
if (dict_get(includes_dict, hash) != 0) {
atomic_i32_eval_exchange(&desc->should_reload, 1);
atomic_i32_eval_exchange(&desc->is_dirty, 1);
caused_dirty = true;
}
}
@ -551,6 +551,11 @@ INTERNAL b32 shader_set_dirty(struct string name)
}
return caused_dirty;
}
INTERNAL b32 shader_unset_dirty(struct dx11_shader_desc *desc)
{
return atomic_i32_eval_compare_exchange(&desc->is_dirty, 1, 0) == 1;
}
#endif
/* ========================== *
@ -1173,7 +1178,7 @@ void gpu_present_backbuffer(i32 vsync)
#if RESOURCE_RELOADING
for (u64 i = SHADER_NONE + 1; i < NUM_SHADERS; ++i) {
struct dx11_shader_desc *desc = &G.shader_info[i];
if (atomic_i32_eval_compare_exchange(&desc->should_reload, 1, 0) == 1) {
if (shader_unset_dirty(desc)) {
reload_shader(&G.shaders[i], desc);
}
}