diff --git a/command.c b/command.c index 93cc3cb8e1..1b1d790a3f 100644 --- a/command.c +++ b/command.c @@ -1776,7 +1776,7 @@ void command_event_reinit(const int flags) command_event(CMD_EVENT_GAME_FOCUS_TOGGLE, &game_focus_cmd); #ifdef HAVE_MENU - p_disp->framebuf_dirty = true; + p_disp->flags |= GFX_DISP_FLAG_FB_DIRTY; if (video_fullscreen) video_driver_hide_mouse(); if ( menu_st->alive diff --git a/gfx/gfx_animation.c b/gfx/gfx_animation.c index 4a1589ce2e..131bfab2e6 100644 --- a/gfx/gfx_animation.c +++ b/gfx/gfx_animation.c @@ -66,10 +66,7 @@ static gfx_animation_t anim_st = { NULL, /* list */ NULL, /* pending */ 0.0f, /* delta_time */ - false, /* pending_deletes */ - false, /* in_update */ - false, /* animation_is_active */ - false /* ticker_is_active */ + 0 /* flags */ }; gfx_animation_t *anim_get_ptr(void) @@ -1175,7 +1172,7 @@ bool gfx_animation_push(gfx_animation_ctx_entry_t *entry) if (!t.easing || t.duration == 0 || t.initial_value == t.target_value) return false; - if (p_anim->in_update) + if (p_anim->flags & GFX_ANIM_FLAG_IN_UPDATE) RBUF_PUSH(p_anim->pending, t); else RBUF_PUSH(p_anim->list, t); @@ -1192,7 +1189,7 @@ bool gfx_animation_update( { unsigned i; gfx_animation_t *p_anim = &anim_st; - const bool ticker_is_active = p_anim->ticker_is_active; + const bool ticker_is_active = p_anim->flags & GFX_ANIM_FLAG_TICKER_IS_ACTIVE; static retro_time_t last_clock_update = 0; static retro_time_t last_ticker_update = 0; @@ -1227,7 +1224,7 @@ bool gfx_animation_update( if (((p_anim->cur_time - last_clock_update) > 1000000) /* 1000000 us == 1 second */ && timedate_enable) { - p_anim->animation_is_active = true; + p_anim->flags |= GFX_ANIM_FLAG_IS_ACTIVE; last_clock_update = p_anim->cur_time; } @@ -1296,8 +1293,8 @@ bool gfx_animation_update( } } - p_anim->in_update = true; - p_anim->pending_deletes = false; + p_anim->flags |= GFX_ANIM_FLAG_IN_UPDATE; + p_anim->flags &= ~GFX_ANIM_FLAG_PENDING_DELETES; for (i = 0; i < RBUF_LEN(p_anim->list); i++) { @@ -1326,7 +1323,7 @@ bool gfx_animation_update( } } - if (p_anim->pending_deletes) + if (p_anim->flags & GFX_ANIM_FLAG_PENDING_DELETES) { for (i = 0; i < RBUF_LEN(p_anim->list); i++) { @@ -1337,7 +1334,7 @@ bool gfx_animation_update( i--; } } - p_anim->pending_deletes = false; + p_anim->flags &= ~GFX_ANIM_FLAG_PENDING_DELETES; } if (RBUF_LEN(p_anim->pending) > 0) @@ -1350,10 +1347,13 @@ bool gfx_animation_update( RBUF_CLEAR(p_anim->pending); } - p_anim->in_update = false; - p_anim->animation_is_active = RBUF_LEN(p_anim->list) > 0; + p_anim->flags &= ~GFX_ANIM_FLAG_IN_UPDATE; + if (RBUF_LEN(p_anim->list) > 0) + p_anim->flags |= GFX_ANIM_FLAG_IS_ACTIVE; + else + p_anim->flags &= ~GFX_ANIM_FLAG_IS_ACTIVE; - return p_anim->animation_is_active; + return ((p_anim->flags & GFX_ANIM_FLAG_IS_ACTIVE) > 0); } static void build_ticker_loop_string( @@ -1491,7 +1491,7 @@ bool gfx_animation_ticker(gfx_animation_ctx_ticker_t *ticker) break; } - p_anim->ticker_is_active = true; + p_anim->flags |= GFX_ANIM_FLAG_TICKER_IS_ACTIVE; return true; } @@ -1636,7 +1636,7 @@ static bool gfx_animation_ticker_smooth_fw( success = true; is_active = true; - p_anim->ticker_is_active = true; + p_anim->flags |= GFX_ANIM_FLAG_TICKER_IS_ACTIVE; end: if (!success) @@ -1859,7 +1859,7 @@ bool gfx_animation_ticker_smooth(gfx_animation_ctx_ticker_smooth_t *ticker) success = true; is_active = true; - p_anim->ticker_is_active = true; + p_anim->flags |= GFX_ANIM_FLAG_TICKER_IS_ACTIVE; end: @@ -1965,7 +1965,7 @@ bool gfx_animation_line_ticker(gfx_animation_ctx_line_ticker_t *line_ticker) success = true; is_active = true; - p_anim->ticker_is_active = true; + p_anim->flags |= GFX_ANIM_FLAG_TICKER_IS_ACTIVE; end: @@ -2159,7 +2159,7 @@ bool gfx_animation_line_ticker_smooth(gfx_animation_ctx_line_ticker_smooth_t *li success = true; is_active = true; - p_anim->ticker_is_active = true; + p_anim->flags |= GFX_ANIM_FLAG_TICKER_IS_ACTIVE; end: @@ -2213,10 +2213,10 @@ bool gfx_animation_kill_by_tag(uintptr_t *tag) * > Cannot modify p_anim->list now, so schedule a * delete for when the gfx_animation_update() loop * is complete */ - if (p_anim->in_update) + if (p_anim->flags & GFX_ANIM_FLAG_IN_UPDATE) { t->deleted = true; - p_anim->pending_deletes = true; + p_anim->flags |= GFX_ANIM_FLAG_PENDING_DELETES; } else { @@ -2230,7 +2230,7 @@ bool gfx_animation_kill_by_tag(uintptr_t *tag) * (otherwise any entries that are simultaneously added * and deleted inside gfx_animation_update() won't get * deleted at all, producing utter chaos) */ - if (p_anim->in_update) + if (p_anim->flags & GFX_ANIM_FLAG_IN_UPDATE) { for (i = 0; i < RBUF_LEN(p_anim->pending); ++i) { diff --git a/gfx/gfx_animation.h b/gfx/gfx_animation.h index baa4679ad6..5b5f0723ed 100644 --- a/gfx/gfx_animation.h +++ b/gfx/gfx_animation.h @@ -29,19 +29,10 @@ RETRO_BEGIN_DECLS #define TICKER_SPACER_DEFAULT " | " -#define ANIM_IS_ACTIVE(_p) ((_p)->animation_is_active || (_p)->ticker_is_active) +#define ANIM_IS_ACTIVE(_p) (((_p)->flags & (GFX_ANIM_FLAG_IS_ACTIVE)) || ((_p)->flags & GFX_ANIM_FLAG_TICKER_IS_ACTIVE)) -#define GFX_ANIMATION_CLEAR_ACTIVE(anim) \ -{ \ - (anim)->animation_is_active = false; \ - (anim)->ticker_is_active = false; \ -} - -#define GFX_ANIMATION_SET_ACTIVE(anim) \ -{ \ - (anim)->animation_is_active = true; \ - (anim)->ticker_is_active = true; \ -} +#define GFX_ANIMATION_CLEAR_ACTIVE(anim) ((anim)->flags &= ~(GFX_ANIM_FLAG_IS_ACTIVE | GFX_ANIM_FLAG_TICKER_IS_ACTIVE)) +#define GFX_ANIMATION_SET_ACTIVE(anim) ((anim)->flags |= (GFX_ANIM_FLAG_IS_ACTIVE | GFX_ANIM_FLAG_TICKER_IS_ACTIVE)) typedef void (*tween_cb) (void*); @@ -209,6 +200,14 @@ struct tween bool deleted; }; +enum gfx_animation_flags +{ + GFX_ANIM_FLAG_PENDING_DELETES = (1 << 0), + GFX_ANIM_FLAG_IN_UPDATE = (1 << 1), + GFX_ANIM_FLAG_IS_ACTIVE = (1 << 2), + GFX_ANIM_FLAG_TICKER_IS_ACTIVE = (1 << 3) +}; + struct gfx_animation { uint64_t ticker_idx; /* updated every TICKER_SPEED us */ @@ -224,10 +223,7 @@ struct gfx_animation float delta_time; - bool pending_deletes; - bool in_update; - bool animation_is_active; - bool ticker_is_active; + uint8_t flags; }; typedef struct gfx_animation gfx_animation_t; diff --git a/gfx/gfx_display.c b/gfx/gfx_display.c index ab79b1c600..c19d9dbf65 100644 --- a/gfx/gfx_display.c +++ b/gfx/gfx_display.c @@ -1258,12 +1258,13 @@ void gfx_display_free(void) gfx_display_t *p_disp = &dispgfx_st; video_coord_array_free(&p_disp->dispca); - p_disp->msg_force = false; + p_disp->flags &= ~(GFX_DISP_FLAG_MSG_FORCE + | GFX_DISP_FLAG_HAS_WINDOWED + ); p_disp->header_height = 0; p_disp->framebuf_width = 0; p_disp->framebuf_height = 0; p_disp->framebuf_pitch = 0; - p_disp->has_windowed = false; p_disp->dispctx = NULL; } @@ -1272,7 +1273,10 @@ void gfx_display_init(void) gfx_display_t *p_disp = &dispgfx_st; video_coord_array_t *p_dispca = &p_disp->dispca; - p_disp->has_windowed = video_driver_has_windowed(); + if (video_driver_has_windowed()) + p_disp->flags |= GFX_DISP_FLAG_HAS_WINDOWED; + else + p_disp->flags &= ~GFX_DISP_FLAG_HAS_WINDOWED; p_dispca->allocated = 0; } diff --git a/gfx/gfx_display.h b/gfx/gfx_display.h index b2f50b63be..1ec620b05c 100644 --- a/gfx/gfx_display.h +++ b/gfx/gfx_display.h @@ -34,6 +34,13 @@ RETRO_BEGIN_DECLS +enum gfx_display_flags +{ + GFX_DISP_FLAG_HAS_WINDOWED = (1 << 0), + GFX_DISP_FLAG_MSG_FORCE = (1 << 1), + GFX_DISP_FLAG_FB_DIRTY = (1 << 2) +}; + #define GFX_SHADOW_ALPHA 0.50f /* Number of pixels corner-to-corner on a 1080p @@ -65,7 +72,7 @@ RETRO_BEGIN_DECLS * so that we don't have to render the display graphics per-frame * unless a change has happened. * */ -#define GFX_DISPLAY_GET_UPDATE_PENDING(p_anim, p_disp) (ANIM_IS_ACTIVE(p_anim) || p_disp->framebuf_dirty) +#define GFX_DISPLAY_GET_UPDATE_PENDING(p_anim, p_disp) (ANIM_IS_ACTIVE(p_anim) || (p_disp->flags & GFX_DISP_FLAG_FB_DIRTY)) enum menu_driver_id_type { @@ -207,9 +214,7 @@ struct gfx_display enum menu_driver_id_type menu_driver_id; - bool has_windowed; - bool msg_force; - bool framebuf_dirty; + uint8_t flags; }; void gfx_display_free(void); diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index 33ae289538..e2617d12a9 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -2024,7 +2024,7 @@ static int generic_action_ok(const char *path, bool config_save_on_exit = settings->bools.config_save_on_exit; flush_type = MENU_SETTINGS; - disp_get_ptr()->msg_force = true; + disp_get_ptr()->flags |= GFX_DISP_FLAG_MSG_FORCE; if (config_replace(config_save_on_exit, action_path)) { diff --git a/menu/drivers/rgui.c b/menu/drivers/rgui.c index 6291466810..889a180a1f 100644 --- a/menu/drivers/rgui.c +++ b/menu/drivers/rgui.c @@ -4870,7 +4870,7 @@ static void rgui_render(void *data, if (!rgui->force_redraw) { - msg_force = p_disp->msg_force; + msg_force = p_disp->flags & GFX_DISP_FLAG_MSG_FORCE; if (menu_entries_ctl(MENU_ENTRIES_CTL_NEEDS_REFRESH, NULL) && !msg_force) @@ -4920,7 +4920,7 @@ static void rgui_render(void *data, if (rgui->bg_modified) rgui->bg_modified = false; - p_disp->framebuf_dirty = true; + p_disp->flags |= GFX_DISP_FLAG_FB_DIRTY; GFX_ANIMATION_CLEAR_ACTIVE(p_anim); rgui->force_redraw = false; @@ -6373,13 +6373,13 @@ static void rgui_set_texture(void *data) rgui_t *rgui = (rgui_t*)data; /* Framebuffer is dirty and needs to be updated? */ - if (!rgui || !p_disp->framebuf_dirty) + if (!rgui || !(p_disp->flags & GFX_DISP_FLAG_FB_DIRTY)) return; fb_width = p_disp->framebuf_width; fb_height = p_disp->framebuf_height; - p_disp->framebuf_dirty = false; + p_disp->flags &= ~GFX_DISP_FLAG_FB_DIRTY; if (internal_upscale_level == RGUI_UPSCALE_NONE) video_driver_set_texture_frame(rgui->frame_buf.data, @@ -7123,11 +7123,11 @@ static int rgui_environ(enum menu_environ_cb type, { case MENU_ENVIRON_ENABLE_MOUSE_CURSOR: rgui->show_mouse = true; - p_disp->framebuf_dirty = true; + p_disp->flags |= GFX_DISP_FLAG_FB_DIRTY; break; case MENU_ENVIRON_DISABLE_MOUSE_CURSOR: rgui->show_mouse = false; - p_disp->framebuf_dirty = false; + p_disp->flags &= ~GFX_DISP_FLAG_FB_DIRTY; break; case MENU_ENVIRON_ENABLE_SCREENSAVER: rgui->show_screensaver = true; diff --git a/runloop.c b/runloop.c index 8e467565b4..2c364c4114 100644 --- a/runloop.c +++ b/runloop.c @@ -6875,7 +6875,7 @@ static enum runloop_state_enum runloop_check_state( list_info.action = 0; menu_driver_list_cache(&list_info); - p_disp->msg_force = true; + p_disp->flags |= GFX_DISP_FLAG_MSG_FORCE; generic_action_ok_displaylist_push("", NULL, "", 0, 0, 0, ACTION_OK_DL_CONTENT_SETTINGS); @@ -6919,7 +6919,7 @@ static enum runloop_state_enum runloop_check_state( BIT64_SET(menu->state, MENU_STATE_RENDER_FRAMEBUFFER); if (BIT64_GET(menu->state, MENU_STATE_RENDER_FRAMEBUFFER)) - p_disp->framebuf_dirty = true; + p_disp->flags |= GFX_DISP_FLAG_FB_DIRTY; if (BIT64_GET(menu->state, MENU_STATE_RENDER_MESSAGEBOX) && !string_is_empty(menu->menu_state_msg)) diff --git a/tasks/task_save.c b/tasks/task_save.c index 6a8be646b2..6a5d5fd07f 100644 --- a/tasks/task_save.c +++ b/tasks/task_save.c @@ -99,6 +99,18 @@ struct sram_block unsigned type; }; +enum save_task_state_flags +{ + SAVE_TASK_FLAG_LOAD_TO_BACKUP_BUFF = (1 << 0), + SAVE_TASK_FLAG_AUTOLOAD = (1 << 1), + SAVE_TASK_FLAG_AUTOSAVE = (1 << 2), + SAVE_TASK_FLAG_UNDO_SAVE = (1 << 3), + SAVE_TASK_FLAG_MUTE = (1 << 4), + SAVE_TASK_FLAG_THUMBNAIL_ENABLE = (1 << 5), + SAVE_TASK_FLAG_HAS_VALID_FB = (1 << 6), + SAVE_TASK_FLAG_COMPRESS_FILES = (1 << 7) +}; + typedef struct { intfstream_t *file; @@ -109,15 +121,8 @@ typedef struct ssize_t written; ssize_t bytes_read; int state_slot; + uint8_t flags; char path[PATH_MAX_LENGTH]; - bool load_to_backup_buffer; - bool autoload; - bool autosave; - bool undo_save; - bool mute; - bool thumbnail_enable; - bool has_valid_framebuffer; - bool compress_files; } save_task_state_t; #ifdef HAVE_THREADS @@ -592,7 +597,8 @@ static void task_save_handler_finished(retro_task_t *task, if (state->data) { - if (state->undo_save && state->data == undo_save_buf.data) + if ( (state->flags & SAVE_TASK_FLAG_UNDO_SAVE) + && (state->data == undo_save_buf.data)) undo_save_buf.data = NULL; free(state->data); state->data = NULL; @@ -723,7 +729,7 @@ static void task_save_handler(retro_task_t *task) if (!state->file) { - if (state->compress_files) + if (state->flags & SAVE_TASK_FLAG_COMPRESS_FILES) state->file = intfstream_open_rzip_file( state->path, RETRO_VFS_FILE_ACCESS_WRITE); else @@ -758,7 +764,7 @@ static void task_save_handler(retro_task_t *task) size_t err_size = 8192 * sizeof(char); char *err = (char*)malloc(err_size); - if (state->undo_save) + if (state->flags & SAVE_TASK_FLAG_UNDO_SAVE) { const char *failed_undo_str = msg_hash_to_str( MSG_FAILED_TO_UNDO_SAVE_STATE); @@ -789,7 +795,7 @@ static void task_save_handler(retro_task_t *task) task_free_title(task); - if (state->undo_save) + if (state->flags & SAVE_TASK_FLAG_UNDO_SAVE) msg = strdup(msg_hash_to_str(MSG_RESTORED_OLD_SAVE_STATE)); else if (state->state_slot < 0) msg = strdup(msg_hash_to_str(MSG_SAVED_STATE_TO_SLOT_AUTO)); @@ -840,13 +846,13 @@ static bool task_push_undo_save_state(const char *path, void *data, size_t size) strlcpy(state->path, path, sizeof(state->path)); state->data = data; state->size = size; - state->undo_save = true; + state->flags |= SAVE_TASK_FLAG_UNDO_SAVE; state->state_slot = settings->ints.state_slot; - state->has_valid_framebuffer = video_driver_cached_frame_has_valid_framebuffer(); + if (video_driver_cached_frame_has_valid_framebuffer()) + state->flags |= SAVE_TASK_FLAG_HAS_VALID_FB; #if defined(HAVE_ZLIB) - state->compress_files = settings->bools.savestate_file_compression; -#else - state->compress_files = false; + if (settings->bools.savestate_file_compression) + state->flags |= SAVE_TASK_FLAG_COMPRESS_FILES; #endif task->type = TASK_TYPE_BLOCKING; task->state = state; @@ -969,7 +975,7 @@ static void task_load_handler(retro_task_t *task) if (task_get_cancelled(task) || bytes_read != remaining) { - if (state->autoload) + if (state->flags & SAVE_TASK_FLAG_AUTOLOAD) { char *msg = (char*)malloc(8192 * sizeof(char)); @@ -1000,7 +1006,7 @@ static void task_load_handler(retro_task_t *task) size_t msg_size = 8192 * sizeof(char); char *msg = (char*)malloc(msg_size); - if (state->autoload) + if (state->flags & SAVE_TASK_FLAG_AUTOLOAD) { msg[0] = '\0'; snprintf(msg, @@ -1158,7 +1164,7 @@ static void content_load_state_cb(retro_task_t *task, /* This means we're backing up the file in memory, * so content_undo_save_state() * can restore it */ - if (load_data->load_to_backup_buffer) + if (load_data->flags & SAVE_TASK_FLAG_LOAD_TO_BACKUP_BUFF) { /* If we were previously backing up a file, let go of it first */ if (undo_save_buf.data) @@ -1283,9 +1289,10 @@ static void save_state_cb(retro_task_t *task, settings_t *settings = config_get_ptr(); const char *dir_screenshot = settings->paths.directory_screenshot; - if (state->thumbnail_enable) + if (state->flags & SAVE_TASK_FLAG_THUMBNAIL_ENABLE) take_screenshot(dir_screenshot, - path, true, state->has_valid_framebuffer, false, true); + path, true, + state->flags & SAVE_TASK_FLAG_HAS_VALID_FB, false, true); free(path); #endif @@ -1312,15 +1319,18 @@ static void task_push_save_state(const char *path, void *data, size_t size, bool strlcpy(state->path, path, sizeof(state->path)); state->data = data; state->size = size; - state->autosave = autosave; - state->mute = autosave; /* don't show OSD messages if we are auto-saving */ - state->thumbnail_enable = settings->bools.savestate_thumbnail_enable; + /* Don't show OSD messages if we are auto-saving */ + if (autosave) + state->flags |= (SAVE_TASK_FLAG_AUTOSAVE | + SAVE_TASK_FLAG_MUTE); + if (settings->bools.savestate_thumbnail_enable) + state->flags |= SAVE_TASK_FLAG_THUMBNAIL_ENABLE; state->state_slot = settings->ints.state_slot; - state->has_valid_framebuffer = video_driver_cached_frame_has_valid_framebuffer(); + if (video_driver_cached_frame_has_valid_framebuffer()) + state->flags |= SAVE_TASK_FLAG_HAS_VALID_FB; #if defined(HAVE_ZLIB) - state->compress_files = settings->bools.savestate_file_compression; -#else - state->compress_files = false; + if (settings->bools.savestate_file_compression) + state->flags |= SAVE_TASK_FLAG_COMPRESS_FILES; #endif task->type = TASK_TYPE_BLOCKING; @@ -1328,7 +1338,7 @@ static void task_push_save_state(const char *path, void *data, size_t size, bool task->handler = task_save_handler; task->callback = save_state_cb; task->title = strdup(msg_hash_to_str(MSG_SAVING_STATE)); - task->mute = state->mute; + task->mute = state->flags & SAVE_TASK_FLAG_MUTE; if (!task_queue_push(task)) { @@ -1370,7 +1380,7 @@ static void content_load_and_save_state_cb(retro_task_t *task, char *path = strdup(load_data->path); void *data = load_data->undo_data; size_t size = load_data->undo_size; - bool autosave = load_data->autosave; + bool autosave = load_data->flags & SAVE_TASK_FLAG_AUTOSAVE; content_load_state_cb(task, task_data, user_data, error); @@ -1408,21 +1418,22 @@ static void task_push_load_and_save_state(const char *path, void *data, strlcpy(state->path, path, sizeof(state->path)); - state->load_to_backup_buffer = load_to_backup_buffer; + if (load_to_backup_buffer) + state->flags |= SAVE_TASK_FLAG_LOAD_TO_BACKUP_BUFF; state->undo_size = size; state->undo_data = data; - state->autosave = autosave; - state->mute = autosave; /* don't show OSD messages if we - are auto-saving */ + /* Don't show OSD messages if we are auto-saving */ + if (autosave) + state->flags |= (SAVE_TASK_FLAG_AUTOSAVE | + SAVE_TASK_FLAG_MUTE); if (load_to_backup_buffer) - state->mute = true; + state->flags |= SAVE_TASK_FLAG_MUTE; state->state_slot = settings->ints.state_slot; - state->has_valid_framebuffer = - video_driver_cached_frame_has_valid_framebuffer(); + if (video_driver_cached_frame_has_valid_framebuffer()) + state->flags |= SAVE_TASK_FLAG_HAS_VALID_FB; #if defined(HAVE_ZLIB) - state->compress_files = settings->bools.savestate_file_compression; -#else - state->compress_files = false; + if (settings->bools.savestate_file_compression) + state->flags |= SAVE_TASK_FLAG_COMPRESS_FILES; #endif task->state = state; @@ -1430,7 +1441,7 @@ static void task_push_load_and_save_state(const char *path, void *data, task->handler = task_load_handler; task->callback = content_load_and_save_state_cb; task->title = strdup(msg_hash_to_str(MSG_LOADING_STATE)); - task->mute = state->mute; + task->mute = state->flags & SAVE_TASK_FLAG_MUTE; if (!task_queue_push(task)) { @@ -1602,15 +1613,16 @@ bool content_load_state(const char *path, goto error; strlcpy(state->path, path, sizeof(state->path)); - state->load_to_backup_buffer = load_to_backup_buffer; - state->autoload = autoload; + if (load_to_backup_buffer) + state->flags |= SAVE_TASK_FLAG_LOAD_TO_BACKUP_BUFF; + if (autoload) + state->flags |= SAVE_TASK_FLAG_AUTOLOAD; state->state_slot = settings->ints.state_slot; - state->has_valid_framebuffer = - video_driver_cached_frame_has_valid_framebuffer(); + if (video_driver_cached_frame_has_valid_framebuffer()) + state->flags |= SAVE_TASK_FLAG_HAS_VALID_FB; #if defined(HAVE_ZLIB) - state->compress_files = settings->bools.savestate_file_compression; -#else - state->compress_files = false; + if (settings->bools.savestate_file_compression) + state->flags |= SAVE_TASK_FLAG_COMPRESS_FILES; #endif task->type = TASK_TYPE_BLOCKING;