diff --git a/gfx/drivers/ctr_gfx.c b/gfx/drivers/ctr_gfx.c index 70cf1b935f..ea71b5d12e 100644 --- a/gfx/drivers/ctr_gfx.c +++ b/gfx/drivers/ctr_gfx.c @@ -1215,8 +1215,17 @@ static void ctr_set_osd_msg(void *data, font_driver_render_msg(video_info, font, msg, params); } +static uint32_t ctr_get_flags(void *data) +{ + uint32_t flags = 0; + + BIT32_SET(flags, GFX_CTX_FLAGS_SCREENSHOTS_SUPPORTED); + + return flags; +} + static const video_poke_interface_t ctr_poke_interface = { - NULL, /* get_flags */ + ctr_get_flags, ctr_load_texture, ctr_unload_texture, NULL, diff --git a/gfx/drivers/d3d9.c b/gfx/drivers/d3d9.c index e8797b092f..cbf97bfe57 100644 --- a/gfx/drivers/d3d9.c +++ b/gfx/drivers/d3d9.c @@ -2045,6 +2045,7 @@ static uint32_t d3d9_get_flags(void *data) BIT32_SET(flags, GFX_CTX_FLAGS_BLACK_FRAME_INSERTION); BIT32_SET(flags, GFX_CTX_FLAGS_MENU_FRAME_FILTERING); + BIT32_SET(flags, GFX_CTX_FLAGS_SCREENSHOTS_SUPPORTED); return flags; } diff --git a/gfx/drivers/gdi_gfx.c b/gfx/drivers/gdi_gfx.c index 68d5cdca55..77aa766684 100644 --- a/gfx/drivers/gdi_gfx.c +++ b/gfx/drivers/gdi_gfx.c @@ -629,8 +629,15 @@ static void gdi_unload_texture(void *data, uintptr_t handle) free(texture); } +static uint32_t gdi_get_flags(void *data) +{ + uint32_t flags = 0; + + return flags; +} + static const video_poke_interface_t gdi_poke_interface = { - NULL, /* get_flags */ + gdi_get_flags, gdi_load_texture, gdi_unload_texture, gdi_set_video_mode, diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index c17bdfc332..eace635fc6 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -4161,6 +4161,7 @@ static uint32_t gl2_get_flags(void *data) BIT32_SET(flags, GFX_CTX_FLAGS_HARD_SYNC); BIT32_SET(flags, GFX_CTX_FLAGS_BLACK_FRAME_INSERTION); BIT32_SET(flags, GFX_CTX_FLAGS_MENU_FRAME_FILTERING); + BIT32_SET(flags, GFX_CTX_FLAGS_SCREENSHOTS_SUPPORTED); return flags; } diff --git a/gfx/drivers/gl_core.c b/gfx/drivers/gl_core.c index 3dedb4fb21..22b4a84a33 100644 --- a/gfx/drivers/gl_core.c +++ b/gfx/drivers/gl_core.c @@ -1730,6 +1730,7 @@ static uint32_t gl_core_get_flags(void *data) BIT32_SET(flags, GFX_CTX_FLAGS_BLACK_FRAME_INSERTION); BIT32_SET(flags, GFX_CTX_FLAGS_MENU_FRAME_FILTERING); BIT32_SET(flags, GFX_CTX_FLAGS_SHADERS_SLANG); + BIT32_SET(flags, GFX_CTX_FLAGS_SCREENSHOTS_SUPPORTED); return flags; } diff --git a/gfx/drivers/gx2_gfx.c b/gfx/drivers/gx2_gfx.c index 677b7011b8..c345cbd8b8 100644 --- a/gfx/drivers/gx2_gfx.c +++ b/gfx/drivers/gx2_gfx.c @@ -1714,6 +1714,7 @@ static uint32_t wiiu_gfx_get_flags(void *data) uint32_t flags = 0; BIT32_SET(flags, GFX_CTX_FLAGS_SHADERS_SLANG); + BIT32_SET(flags, GFX_CTX_FLAGS_SCREENSHOTS_SUPPORTED); return flags; } diff --git a/gfx/drivers/gx_gfx.c b/gfx/drivers/gx_gfx.c index 723f481419..71f78bcabf 100644 --- a/gfx/drivers/gx_gfx.c +++ b/gfx/drivers/gx_gfx.c @@ -1263,8 +1263,17 @@ static void gx_get_video_output_next(void *data) global->console.screen.resolutions.current.id++; } +static uint32_t gx_get_flags(void *data) +{ + uint32_t flags = 0; + + BIT32_SET(flags, GFX_CTX_FLAGS_SCREENSHOTS_SUPPORTED); + + return flags; +} + static const video_poke_interface_t gx_poke_interface = { - NULL, /* get_flags */ + gx_get_flags, NULL, NULL, gx_set_video_mode, diff --git a/gfx/drivers/metal.m b/gfx/drivers/metal.m index 24621011a6..eb8b375616 100644 --- a/gfx/drivers/metal.m +++ b/gfx/drivers/metal.m @@ -322,6 +322,7 @@ static uint32_t metal_get_flags(void *data) #if defined(HAVE_SLANG) && defined(HAVE_SPIRV_CROSS) BIT32_SET(flags, GFX_CTX_FLAGS_SHADERS_SLANG); #endif + BIT32_SET(flags, GFX_CTX_FLAGS_SCREENSHOTS_SUPPORTED); return flags; } diff --git a/gfx/drivers/psp1_gfx.c b/gfx/drivers/psp1_gfx.c index 497b866319..15d4213b02 100644 --- a/gfx/drivers/psp1_gfx.c +++ b/gfx/drivers/psp1_gfx.c @@ -830,8 +830,17 @@ static void psp_viewport_info(void *data, struct video_viewport *vp) *vp = psp->vp; } +static uint32_t psp_get_flags(void *data) +{ + uint32_t flags = 0; + + BIT32_SET(flags, GFX_CTX_FLAGS_SCREENSHOTS_SUPPORTED); + + return flags; +} + static const video_poke_interface_t psp_poke_interface = { - NULL, /* get_flags */ + psp_get_flags, NULL, NULL, NULL, diff --git a/gfx/drivers/sdl2_gfx.c b/gfx/drivers/sdl2_gfx.c index dbd7a2467a..b0195de5a7 100644 --- a/gfx/drivers/sdl2_gfx.c +++ b/gfx/drivers/sdl2_gfx.c @@ -724,8 +724,15 @@ static void sdl2_grab_mouse_toggle(void *data) SDL_SetWindowGrab(vid->window, SDL_GetWindowGrab(vid->window)); } +static uint32_t sdl2_get_flags(void *data) +{ + uint32_t flags = 0; + + return flags; +} + static video_poke_interface_t sdl2_video_poke_interface = { - NULL, /* get_flags */ + sdl2_get_flags, NULL, NULL, NULL, diff --git a/gfx/drivers/sdl_gfx.c b/gfx/drivers/sdl_gfx.c index d2d7cbe932..fabe1ef37f 100644 --- a/gfx/drivers/sdl_gfx.c +++ b/gfx/drivers/sdl_gfx.c @@ -516,8 +516,17 @@ static void sdl_grab_mouse_toggle(void *data) SDL_WM_GrabInput(mode == SDL_GRAB_ON ? SDL_GRAB_OFF : SDL_GRAB_ON); } +static uint32_t sdl_get_flags(void *data) +{ + uint32_t flags = 0; + + BIT32_SET(flags, GFX_CTX_FLAGS_SCREENSHOTS_SUPPORTED); + + return flags; +} + static const video_poke_interface_t sdl_poke_interface = { - NULL, /* get_flags */ + sdl_get_flags, NULL, NULL, NULL, diff --git a/gfx/drivers/vga_gfx.c b/gfx/drivers/vga_gfx.c index 4c1a96bb06..2be23f0d41 100644 --- a/gfx/drivers/vga_gfx.c +++ b/gfx/drivers/vga_gfx.c @@ -389,8 +389,15 @@ static void vga_set_osd_msg(void *data, font_driver_render_msg(video_info, font, msg, params); } +static uint32_t vga_get_flags(void *data) +{ + uint32_t flags = 0; + + return flags; +} + static const video_poke_interface_t vga_poke_interface = { - NULL, /* get_flags */ + vga_gfx_get_flags, NULL, NULL, NULL, diff --git a/gfx/drivers/vita2d_gfx.c b/gfx/drivers/vita2d_gfx.c index b0436bc31a..d74f899d00 100644 --- a/gfx/drivers/vita2d_gfx.c +++ b/gfx/drivers/vita2d_gfx.c @@ -788,8 +788,17 @@ static bool vita_get_current_sw_framebuffer(void *data, return true; } +static uint32_t vita_get_flags(void *data) +{ + uint32_t flags = 0; + + BIT32_SET(flags, GFX_CTX_FLAGS_SCREENSHOTS_SUPPORTED); + + return flags; +} + static const video_poke_interface_t vita_poke_interface = { - NULL, /* get_flags */ + vita_get_flags, vita_load_texture, vita_unload_texture, NULL, diff --git a/gfx/drivers/vulkan.c b/gfx/drivers/vulkan.c index dd151870a7..fa86e8c179 100644 --- a/gfx/drivers/vulkan.c +++ b/gfx/drivers/vulkan.c @@ -2401,6 +2401,7 @@ static uint32_t vulkan_get_flags(void *data) BIT32_SET(flags, GFX_CTX_FLAGS_BLACK_FRAME_INSERTION); BIT32_SET(flags, GFX_CTX_FLAGS_MENU_FRAME_FILTERING); BIT32_SET(flags, GFX_CTX_FLAGS_SHADERS_SLANG); + BIT32_SET(flags, GFX_CTX_FLAGS_SCREENSHOTS_SUPPORTED); return flags; } diff --git a/gfx/drivers/xvideo.c b/gfx/drivers/xvideo.c index e1016129fc..7440e8a1e2 100644 --- a/gfx/drivers/xvideo.c +++ b/gfx/drivers/xvideo.c @@ -934,8 +934,15 @@ static bool xv_read_viewport(void *data, uint8_t *buffer, bool is_idle) return true; } +static uint32_t xv_get_flags(void *data) +{ + uint32_t flags = 0; + + return flags; +} + static video_poke_interface_t xv_video_poke_interface = { - NULL, /* get_flags */ + xv_get_flags, NULL, NULL, NULL, diff --git a/gfx/video_driver.h b/gfx/video_driver.h index 16fe01f710..efbaf6e3bd 100644 --- a/gfx/video_driver.h +++ b/gfx/video_driver.h @@ -125,7 +125,8 @@ enum display_flags GFX_CTX_FLAGS_SHADERS_GLSL, GFX_CTX_FLAGS_SHADERS_CG, GFX_CTX_FLAGS_SHADERS_HLSL, - GFX_CTX_FLAGS_SHADERS_SLANG + GFX_CTX_FLAGS_SHADERS_SLANG, + GFX_CTX_FLAGS_SCREENSHOTS_SUPPORTED }; enum shader_uniform_type diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 5af7f458e8..4d62287f14 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -1801,11 +1801,14 @@ static int menu_displaylist_parse_load_content_settings( if (settings->bools.quick_menu_show_take_screenshot) { - menu_entries_append_enum(info->list, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_TAKE_SCREENSHOT), - msg_hash_to_str(MENU_ENUM_LABEL_TAKE_SCREENSHOT), - MENU_ENUM_LABEL_TAKE_SCREENSHOT, - MENU_SETTING_ACTION_SCREENSHOT, 0, 0); + gfx_ctx_flags_t flags; + + if (video_driver_get_all_flags(&flags, GFX_CTX_FLAGS_SCREENSHOTS_SUPPORTED)) + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_TAKE_SCREENSHOT), + msg_hash_to_str(MENU_ENUM_LABEL_TAKE_SCREENSHOT), + MENU_ENUM_LABEL_TAKE_SCREENSHOT, + MENU_SETTING_ACTION_SCREENSHOT, 0, 0); } if (settings->bools.quick_menu_show_save_load_state