From 6b31bd8b48241bcb9a360e02dd255ba406165afe Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 24 Apr 2018 15:14:06 +0200 Subject: [PATCH] Only show Menu Linear Filter for RGUI and only show it for video drivers that implement it --- gfx/drivers/d3d10.c | 11 ++++++++++- gfx/drivers/d3d11.c | 11 ++++++++++- gfx/drivers/d3d12.c | 11 ++++++++++- gfx/drivers/d3d8.c | 1 + gfx/drivers/d3d9.c | 1 + gfx/drivers/gl.c | 1 + gfx/video_driver.h | 3 ++- menu/menu_setting.c | 47 ++++++++++++++++++++++++++++++--------------- 8 files changed, 67 insertions(+), 19 deletions(-) diff --git a/gfx/drivers/d3d10.c b/gfx/drivers/d3d10.c index 1e09d00a2b..ea557a2084 100644 --- a/gfx/drivers/d3d10.c +++ b/gfx/drivers/d3d10.c @@ -1583,8 +1583,17 @@ d3d10_get_hw_render_interface(void* data, const struct retro_hw_render_interface } #endif +static uint32_t d3d10_get_flags(void *data) +{ + uint32_t flags = 0; + + BIT32_SET(flags, GFX_CTX_FLAGS_MENU_FRAME_FILTERING); + + return flags; +} + static const video_poke_interface_t d3d10_poke_interface = { - NULL, /* get_flags */ + d3d10_get_flags, NULL, /* set_coords */ NULL, /* set_mvp */ d3d10_gfx_load_texture, diff --git a/gfx/drivers/d3d11.c b/gfx/drivers/d3d11.c index f90b7bc532..e9fc4b71f1 100644 --- a/gfx/drivers/d3d11.c +++ b/gfx/drivers/d3d11.c @@ -1604,8 +1604,17 @@ d3d11_get_hw_render_interface(void* data, const struct retro_hw_render_interface return d3d11->hw.enable; } +static uint32_t d3d11_get_flags(void *data) +{ + uint32_t flags = 0; + + BIT32_SET(flags, GFX_CTX_FLAGS_MENU_FRAME_FILTERING); + + return flags; +} + static const video_poke_interface_t d3d11_poke_interface = { - NULL, /* get_flags */ + d3d11_get_flags, NULL, /* set_coords */ NULL, /* set_mvp */ d3d11_gfx_load_texture, diff --git a/gfx/drivers/d3d12.c b/gfx/drivers/d3d12.c index 5474cea885..4f7e884c0c 100644 --- a/gfx/drivers/d3d12.c +++ b/gfx/drivers/d3d12.c @@ -1750,8 +1750,17 @@ static void d3d12_gfx_unload_texture(void* data, uintptr_t handle) free(texture); } +static uint32_t d3d12_get_flags(void *data) +{ + uint32_t flags = 0; + + BIT32_SET(flags, GFX_CTX_FLAGS_MENU_FRAME_FILTERING); + + return flags; +} + static const video_poke_interface_t d3d12_poke_interface = { - NULL, /* get_flags */ + d3d12_get_flags, NULL, /* set_coords */ NULL, /* set_mvp */ d3d12_gfx_load_texture, diff --git a/gfx/drivers/d3d8.c b/gfx/drivers/d3d8.c index f21c2cc3c2..c39a70cd3c 100644 --- a/gfx/drivers/d3d8.c +++ b/gfx/drivers/d3d8.c @@ -1872,6 +1872,7 @@ static uint32_t d3d8_get_flags(void *data) uint32_t flags = 0; BIT32_SET(flags, GFX_CTX_FLAGS_BLACK_FRAME_INSERTION); + BIT32_SET(flags, GFX_CTX_FLAGS_MENU_FRAME_FILTERING); return flags; } diff --git a/gfx/drivers/d3d9.c b/gfx/drivers/d3d9.c index a06452f309..5902a65612 100644 --- a/gfx/drivers/d3d9.c +++ b/gfx/drivers/d3d9.c @@ -1899,6 +1899,7 @@ static uint32_t d3d9_get_flags(void *data) uint32_t flags = 0; BIT32_SET(flags, GFX_CTX_FLAGS_BLACK_FRAME_INSERTION); + BIT32_SET(flags, GFX_CTX_FLAGS_MENU_FRAME_FILTERING); return flags; } diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index 0cf00d7a7a..26335bd7d2 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -2608,6 +2608,7 @@ static uint32_t gl_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); return flags; } diff --git a/gfx/video_driver.h b/gfx/video_driver.h index 90a93e6794..4563e9a3b7 100644 --- a/gfx/video_driver.h +++ b/gfx/video_driver.h @@ -115,7 +115,8 @@ enum display_flags GFX_CTX_FLAGS_MULTISAMPLING, GFX_CTX_FLAGS_CUSTOMIZABLE_SWAPCHAIN_IMAGES, GFX_CTX_FLAGS_HARD_SYNC, - GFX_CTX_FLAGS_BLACK_FRAME_INSERTION + GFX_CTX_FLAGS_BLACK_FRAME_INSERTION, + GFX_CTX_FLAGS_MENU_FRAME_FILTERING }; enum shader_uniform_type diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 38f3d7c406..e307387d48 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -5166,21 +5166,38 @@ static bool setting_append_list( SD_FLAG_ADVANCED ); - CONFIG_BOOL( - list, list_info, - &settings->bools.menu_linear_filter, - MENU_ENUM_LABEL_MENU_LINEAR_FILTER, - MENU_ENUM_LABEL_VALUE_MENU_LINEAR_FILTER, - true, - MENU_ENUM_LABEL_VALUE_OFF, - MENU_ENUM_LABEL_VALUE_ON, - &group_info, - &subgroup_info, - parent_group, - general_write_handler, - general_read_handler, - SD_FLAG_ADVANCED - ); + if (string_is_equal(settings->arrays.menu_driver, "rgui")) + { + gfx_ctx_flags_t flags; + bool setting_set = false; + + if (video_driver_get_flags(&flags)) + if (BIT32_GET(flags.flags, GFX_CTX_FLAGS_MENU_FRAME_FILTERING)) + setting_set = true; + + flags.flags = 0; + + if (video_context_driver_get_flags(&flags)) + if (BIT32_GET(flags.flags, GFX_CTX_FLAGS_MENU_FRAME_FILTERING)) + setting_set = true; + + if (setting_set) + CONFIG_BOOL( + list, list_info, + &settings->bools.menu_linear_filter, + MENU_ENUM_LABEL_MENU_LINEAR_FILTER, + MENU_ENUM_LABEL_VALUE_MENU_LINEAR_FILTER, + true, + MENU_ENUM_LABEL_VALUE_OFF, + MENU_ENUM_LABEL_VALUE_ON, + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler, + SD_FLAG_ADVANCED + ); + } if (string_is_equal(settings->arrays.menu_driver, "xmb")) {