diff --git a/src/gpu_dx11.c b/src/gpu_dx11.c index 12a912f0..dcabafd7 100644 --- a/src/gpu_dx11.c +++ b/src/gpu_dx11.c @@ -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); } }