From 119689c9405b5e4a321fafc340f6f0294b0338c3 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sun, 2 Aug 2020 19:25:45 +0200 Subject: [PATCH] Add get_metrics to poke interface --- gfx/drivers/caca_gfx.c | 1 + gfx/drivers/ctr_gfx.c | 1 + gfx/drivers/d3d10.c | 3 +- gfx/drivers/d3d11.c | 3 +- gfx/drivers/d3d12.c | 3 +- gfx/drivers/d3d8.c | 1 + gfx/drivers/d3d9.c | 1 + gfx/drivers/dispmanx_gfx.c | 2 +- gfx/drivers/drm_gfx.c | 1 + gfx/drivers/exynos_gfx.c | 58 +++++++++++------------------------- gfx/drivers/fpga_gfx.c | 46 +++++++--------------------- gfx/drivers/gcm_gfx.c | 1 + gfx/drivers/gdi_gfx.c | 1 + gfx/drivers/gl.c | 14 ++++++++- gfx/drivers/gl1.c | 13 ++++++++ gfx/drivers/gl_core.c | 13 ++++++++ gfx/drivers/gx2_gfx.c | 1 + gfx/drivers/gx_gfx.c | 3 +- gfx/drivers/metal.m | 12 ++++---- gfx/drivers/network_gfx.c | 3 +- gfx/drivers/oga_gfx.c | 43 +++++++++++++------------- gfx/drivers/omap_gfx.c | 1 + gfx/drivers/ps2_gfx.c | 3 +- gfx/drivers/psp1_gfx.c | 1 + gfx/drivers/sdl2_gfx.c | 1 + gfx/drivers/sdl_dingux_gfx.c | 1 + gfx/drivers/sdl_gfx.c | 1 + gfx/drivers/sixel_gfx.c | 3 +- gfx/drivers/sunxi_gfx.c | 1 + gfx/drivers/switch_gfx.c | 1 + gfx/drivers/switch_nx_gfx.c | 43 +++++++++++++------------- gfx/drivers/vg.c | 41 ++++++++++++++++++++++++- gfx/drivers/vga_gfx.c | 1 + gfx/drivers/vita2d_gfx.c | 1 + gfx/drivers/vulkan.c | 13 ++++++++ gfx/drivers/xshm_gfx.c | 1 + gfx/drivers/xvideo.c | 1 + gfx/gfx_display.c | 8 ++--- gfx/video_thread_wrapper.c | 10 +++++++ menu/menu_displaylist.c | 6 ++-- retroarch.c | 27 ++++++++--------- retroarch.h | 3 +- 42 files changed, 236 insertions(+), 156 deletions(-) diff --git a/gfx/drivers/caca_gfx.c b/gfx/drivers/caca_gfx.c index 0c58933da8..29b712e1e1 100644 --- a/gfx/drivers/caca_gfx.c +++ b/gfx/drivers/caca_gfx.c @@ -243,6 +243,7 @@ static void caca_set_texture_frame(void *data, } static const video_poke_interface_t caca_poke_interface = { + NULL, /* get_metrics */ NULL, /* get_flags */ NULL, NULL, diff --git a/gfx/drivers/ctr_gfx.c b/gfx/drivers/ctr_gfx.c index b7103aa708..f9856c3d9b 100644 --- a/gfx/drivers/ctr_gfx.c +++ b/gfx/drivers/ctr_gfx.c @@ -1247,6 +1247,7 @@ static uint32_t ctr_get_flags(void *data) } static const video_poke_interface_t ctr_poke_interface = { + NULL, /* get_metrics */ ctr_get_flags, ctr_load_texture, ctr_unload_texture, diff --git a/gfx/drivers/d3d10.c b/gfx/drivers/d3d10.c index 4b54d2cf2c..93586e2f60 100644 --- a/gfx/drivers/d3d10.c +++ b/gfx/drivers/d3d10.c @@ -1754,10 +1754,11 @@ static void d3d10_get_video_output_next(void *data) } static const video_poke_interface_t d3d10_poke_interface = { + win32_get_metrics, d3d10_get_flags, d3d10_gfx_load_texture, d3d10_gfx_unload_texture, - NULL, /* set_video_mode */ + NULL, /* set_video_mode */ #ifndef __WINRT__ win32_get_refresh_rate, #else diff --git a/gfx/drivers/d3d11.c b/gfx/drivers/d3d11.c index 6256afd077..8ca4f932a4 100644 --- a/gfx/drivers/d3d11.c +++ b/gfx/drivers/d3d11.c @@ -1835,10 +1835,11 @@ static void d3d11_get_video_output_next(void *data) } static const video_poke_interface_t d3d11_poke_interface = { + win32_get_metrics, d3d11_get_flags, d3d11_gfx_load_texture, d3d11_gfx_unload_texture, - NULL, /* set_video_mode */ + NULL, /* set_video_mode */ #ifndef __WINRT__ win32_get_refresh_rate, #else diff --git a/gfx/drivers/d3d12.c b/gfx/drivers/d3d12.c index 35b3779933..1b15195e6f 100644 --- a/gfx/drivers/d3d12.c +++ b/gfx/drivers/d3d12.c @@ -1834,10 +1834,11 @@ static void d3d12_get_video_output_next(void *data) } static const video_poke_interface_t d3d12_poke_interface = { + win32_get_metrics, d3d12_get_flags, d3d12_gfx_load_texture, d3d12_gfx_unload_texture, - NULL, /* set_video_mode */ + NULL, /* set_video_mode */ #ifndef __WINRT__ win32_get_refresh_rate, #else diff --git a/gfx/drivers/d3d8.c b/gfx/drivers/d3d8.c index d061e3548e..89b1450900 100644 --- a/gfx/drivers/d3d8.c +++ b/gfx/drivers/d3d8.c @@ -1794,6 +1794,7 @@ static uint32_t d3d8_get_flags(void *data) } static const video_poke_interface_t d3d_poke_interface = { + win32_get_metrics, d3d8_get_flags, d3d8_load_texture, d3d8_unload_texture, diff --git a/gfx/drivers/d3d9.c b/gfx/drivers/d3d9.c index 2b54c4954a..86b4a3a43f 100644 --- a/gfx/drivers/d3d9.c +++ b/gfx/drivers/d3d9.c @@ -1966,6 +1966,7 @@ static uint32_t d3d9_get_flags(void *data) } static const video_poke_interface_t d3d9_poke_interface = { + win32_get_metrics, d3d9_get_flags, d3d9_load_texture, d3d9_unload_texture, diff --git a/gfx/drivers/dispmanx_gfx.c b/gfx/drivers/dispmanx_gfx.c index 20fbfaaec4..5dd62c6ff1 100644 --- a/gfx/drivers/dispmanx_gfx.c +++ b/gfx/drivers/dispmanx_gfx.c @@ -580,6 +580,7 @@ static uint32_t dispmanx_get_flags(void *data) } static const video_poke_interface_t dispmanx_poke_interface = { + NULL, /* get_metrics */ dispmanx_get_flags, NULL, NULL, @@ -606,7 +607,6 @@ static const video_poke_interface_t dispmanx_poke_interface = { static void dispmanx_gfx_get_poke_interface(void *data, const video_poke_interface_t **iface) { - (void)data; *iface = &dispmanx_poke_interface; } diff --git a/gfx/drivers/drm_gfx.c b/gfx/drivers/drm_gfx.c index 42e426918a..70f9cacbac 100644 --- a/gfx/drivers/drm_gfx.c +++ b/gfx/drivers/drm_gfx.c @@ -933,6 +933,7 @@ static void drm_set_aspect_ratio (void *data, unsigned aspect_ratio_idx) } static const video_poke_interface_t drm_poke_interface = { + NULL, /* get_metrics */ NULL, /* get_flags */ NULL, NULL, diff --git a/gfx/drivers/exynos_gfx.c b/gfx/drivers/exynos_gfx.c index cbf5862383..a26eac8cd7 100644 --- a/gfx/drivers/exynos_gfx.c +++ b/gfx/drivers/exynos_gfx.c @@ -1368,25 +1368,12 @@ static void exynos_gfx_set_nonblock_state(void *data, bool state, vid->data->sync = !state; } -static bool exynos_gfx_alive(void *data) -{ - (void)data; - return true; /* always alive */ -} +/* always alive */ +static bool exynos_gfx_alive(void *data) { return true; } +/* drm device always has focus */ +static bool exynos_gfx_focus(void *data) { return true; } -static bool exynos_gfx_focus(void *data) -{ - (void)data; - return true; /* drm device always has focus */ -} - -static bool exynos_gfx_suppress_screensaver(void *data, bool enable) -{ - (void)data; - (void)enable; - - return false; -} +static bool exynos_gfx_suppress_screensaver(void *data, bool enable) { return false; } static void exynos_gfx_set_rotation(void *data, unsigned rotation) { @@ -1418,19 +1405,16 @@ static void exynos_set_aspect_ratio(void *data, unsigned aspect_ratio_idx) vid->aspect_changed = true; } -static void exynos_apply_state_changes(void *data) -{ - (void)data; -} - -static void exynos_set_texture_frame(void *data, const void *frame, bool rgb32, +static void exynos_set_texture_frame(void *data, + const void *frame, bool rgb32, unsigned width, unsigned height, float alpha) { - const enum exynos_buffer_type buf_type = defaults[EXYNOS_IMAGE_MENU].buf_type; - struct exynos_video *vid = data; - struct exynos_data *pdata = vid->data; - struct g2d_image *src = pdata->src[EXYNOS_IMAGE_MENU]; - const unsigned size = width * height * (rgb32 ? 4 : 2); + const enum exynos_buffer_type buf_type = + defaults[EXYNOS_IMAGE_MENU].buf_type; + struct exynos_video *vid = data; + struct exynos_data *pdata = vid->data; + struct g2d_image *src = pdata->src[EXYNOS_IMAGE_MENU]; + const unsigned size = width * height * (rgb32 ? 4 : 2); if (exynos_realloc_buffer(pdata, buf_type, size) != 0) return; @@ -1461,21 +1445,13 @@ static void exynos_set_texture_enable(void *data, bool state, bool full_screen) vid->menu_active = state; } +static void exynos_apply_state_changes(void *data) { } static void exynos_set_osd_msg(void *data, const char *msg, - const struct font_params *params) -{ - (void)data; - (void)msg; - (void)params; -} - -static void exynos_show_mouse(void *data, bool state) -{ - (void)data; - (void)state; -} + const struct font_params *params) { } +static void exynos_show_mouse(void *data, bool state) { } static const video_poke_interface_t exynos_poke_interface = { + NULL, /* get_metrics */ NULL, /* get_flags */ NULL, NULL, diff --git a/gfx/drivers/fpga_gfx.c b/gfx/drivers/fpga_gfx.c index d93d8bba03..00865765b6 100644 --- a/gfx/drivers/fpga_gfx.c +++ b/gfx/drivers/fpga_gfx.c @@ -273,35 +273,8 @@ static void fpga_gfx_free(void *data) do_mmap_op(&fpga->regOp); } -static bool fpga_gfx_set_shader(void *data, - enum rarch_shader_type type, const char *path) -{ - (void)data; - (void)type; - (void)path; - - return false; -} - -static void fpga_gfx_set_rotation(void *data, - unsigned rotation) -{ - (void)data; - (void)rotation; -} - -static void fpga_gfx_viewport_info(void *data, - struct video_viewport *vp) -{ - (void)data; - (void)vp; -} - static bool fpga_gfx_read_viewport(void *data, uint8_t *buffer, bool is_idle) { - (void)data; - (void)buffer; - return true; } @@ -336,24 +309,25 @@ static void fpga_set_texture_frame(void *data, } } +static bool fpga_gfx_set_shader(void *data, + enum rarch_shader_type type, const char *path) { return false; } +static void fpga_gfx_set_rotation(void *data, + unsigned rotation) { } +static void fpga_gfx_viewport_info(void *data, + struct video_viewport *vp) { } static void fpga_set_osd_msg(void *data, const char *msg, - const void *params, void *font) -{ -} - + const void *params, void *font) { } static void fpga_get_video_output_size(void *data, unsigned *width, unsigned *height) { } static void fpga_get_video_output_prev(void *data) { } static void fpga_get_video_output_next(void *data) { } - static void fpga_set_video_mode(void *data, unsigned width, unsigned height, - bool fullscreen) -{ -} + bool fullscreen) { } static const video_poke_interface_t fpga_poke_interface = { - NULL, + NULL, /* get_metrics */ + NULL, /* get_flags */ NULL, fpga_set_video_mode, NULL, diff --git a/gfx/drivers/gcm_gfx.c b/gfx/drivers/gcm_gfx.c index 6368e50a82..89c5403a48 100644 --- a/gfx/drivers/gcm_gfx.c +++ b/gfx/drivers/gcm_gfx.c @@ -645,6 +645,7 @@ static uint32_t gcm_get_flags(void *data) } static const video_poke_interface_t gcm_poke_interface = { + NULL, /* get_metrics */ gcm_get_flags, NULL, /* load_texture */ NULL, /* unload_texture */ diff --git a/gfx/drivers/gdi_gfx.c b/gfx/drivers/gdi_gfx.c index 09beea16be..8be2db8f98 100644 --- a/gfx/drivers/gdi_gfx.c +++ b/gfx/drivers/gdi_gfx.c @@ -682,6 +682,7 @@ static void gdi_get_video_output_next(void *data) } static const video_poke_interface_t gdi_poke_interface = { + win32_get_metrics, gdi_get_flags, gdi_load_texture, gdi_unload_texture, diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index 5abe1e020c..3309024dbb 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -4532,7 +4532,20 @@ static uint32_t gl2_get_flags(void *data) return flags; } +static bool gl2_get_metrics(void *data, enum display_metric_types type, + float *value) +{ + gl_t *gl = (gl_t*)data; + if ( gl + && gl->ctx_data + && gl->ctx_driver + && gl->ctx_driver->get_metrics) + return gl->ctx_driver->get_metrics(gl->ctx_data, type, value); + return false; +} + static const video_poke_interface_t gl2_poke_interface = { + gl2_get_metrics, gl2_get_flags, gl2_load_texture, gl2_unload_texture, @@ -4559,7 +4572,6 @@ static const video_poke_interface_t gl2_poke_interface = { static void gl2_get_poke_interface(void *data, const video_poke_interface_t **iface) { - (void)data; *iface = &gl2_poke_interface; } diff --git a/gfx/drivers/gl1.c b/gfx/drivers/gl1.c index ad588852e1..fab40c392e 100644 --- a/gfx/drivers/gl1.c +++ b/gfx/drivers/gl1.c @@ -1386,7 +1386,20 @@ static uint32_t gl1_get_flags(void *data) return flags; } +static bool gl1_get_metrics(void *data, enum display_metric_types type, + float *value) +{ + gl1_t *gl1 = (gl1_t*)data; + if ( gl1 + && gl1->ctx_data + && gl1->ctx_driver + && gl1->ctx_driver->get_metrics) + return gl1->ctx_driver->get_metrics(gl1->ctx_data, type, value); + return false; +} + static const video_poke_interface_t gl1_poke_interface = { + gl1_get_metrics, gl1_get_flags, gl1_load_texture, gl1_unload_texture, diff --git a/gfx/drivers/gl_core.c b/gfx/drivers/gl_core.c index a2aa2756ae..b946110b13 100644 --- a/gfx/drivers/gl_core.c +++ b/gfx/drivers/gl_core.c @@ -2240,7 +2240,20 @@ static retro_proc_address_t gl_core_get_proc_address( return NULL; } +static bool gl_core_get_metrics(void *data, enum display_metric_types type, + float *value) +{ + gl_core_t *gl = (gl_core_t*)data; + if ( gl + && gl->ctx_data + && gl->ctx_driver + && gl->ctx_driver->get_metrics) + return gl->ctx_driver->get_metrics(gl->ctx_data, type, value); + return false; +} + static const video_poke_interface_t gl_core_poke_interface = { + gl_core_get_metrics, gl_core_get_flags, gl_core_load_texture, gl_core_unload_texture, diff --git a/gfx/drivers/gx2_gfx.c b/gfx/drivers/gx2_gfx.c index 9dcb137cbd..2dcf116278 100644 --- a/gfx/drivers/gx2_gfx.c +++ b/gfx/drivers/gx2_gfx.c @@ -1717,6 +1717,7 @@ static uint32_t wiiu_gfx_get_flags(void *data) } static const video_poke_interface_t wiiu_poke_interface = { + NULL, /* get_metrics */ wiiu_gfx_get_flags, wiiu_gfx_load_texture, wiiu_gfx_unload_texture, diff --git a/gfx/drivers/gx_gfx.c b/gfx/drivers/gx_gfx.c index 28e08bfbe4..d3ccfe2b2f 100644 --- a/gfx/drivers/gx_gfx.c +++ b/gfx/drivers/gx_gfx.c @@ -1326,11 +1326,12 @@ static uint32_t gx_get_flags(void *data) } static const video_poke_interface_t gx_poke_interface = { + NULL, /* get_metrics */ gx_get_flags, NULL, NULL, gx_set_video_mode, - NULL, /* get_refresh_rate */ + NULL, /* get_refresh_rate */ NULL, gx_get_video_output_size, gx_get_video_output_prev, diff --git a/gfx/drivers/metal.m b/gfx/drivers/metal.m index 606031b090..d76d3a6f77 100644 --- a/gfx/drivers/metal.m +++ b/gfx/drivers/metal.m @@ -59,14 +59,15 @@ static uint32_t metal_get_flags(void *data); #pragma mark Graphics Context for Metal // The graphics context for the Metal driver is just a stubbed out version -// It supports getting metrics such as dpi which is needed for iOS/tvOS +// It supports getting metrics such as DPI which is needed for iOS/tvOS -static bool metal_gfx_ctx_get_metrics(void *data, enum display_metric_types type, - float *value) +static bool metal_gfx_ctx_get_metrics( + void *data, enum display_metric_types type, + float *value) { #ifdef HAVE_COCOATOUCH - CGRect screenRect = [[UIScreen mainScreen] bounds]; - CGFloat scale = [[UIScreen mainScreen] scale]; + CGRect screenRect = [[UIScreen mainScreen] bounds]; + CGFloat scale = [[UIScreen mainScreen] scale]; float displayHeight = screenRect.size.height; float physicalWidth = screenRect.size.width * scale; float physicalHeight = screenRect.size.height * scale; @@ -400,6 +401,7 @@ static uint32_t metal_get_flags(void *data) } static const video_poke_interface_t metal_poke_interface = { + .get_metrics = metal_gfx_ctx_get_metrics, .get_flags = metal_get_flags, .load_texture = metal_load_texture, .unload_texture = metal_unload_texture, diff --git a/gfx/drivers/network_gfx.c b/gfx/drivers/network_gfx.c index 905f398f8a..608a789b0d 100644 --- a/gfx/drivers/network_gfx.c +++ b/gfx/drivers/network_gfx.c @@ -421,7 +421,8 @@ static void network_set_video_mode(void *data, unsigned width, unsigned height, bool fullscreen) { } static const video_poke_interface_t network_poke_interface = { - NULL, + NULL, /* get_metrics */ + NULL, /* get_flags */ NULL, NULL, network_set_video_mode, diff --git a/gfx/drivers/oga_gfx.c b/gfx/drivers/oga_gfx.c index 0484852e4d..b365c1735a 100644 --- a/gfx/drivers/oga_gfx.c +++ b/gfx/drivers/oga_gfx.c @@ -382,27 +382,28 @@ static void oga_gfx_viewport_info(void *data, struct video_viewport *vp) } static const video_poke_interface_t oga_poke_interface = { - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - oga_set_texture_frame, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL + NULL, /* get_metrics */ + NULL, /* get_flags */ + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + oga_set_texture_frame, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL }; void oga_set_rotation(void *data, unsigned rotation) diff --git a/gfx/drivers/omap_gfx.c b/gfx/drivers/omap_gfx.c index 7e61d9ea54..d88c63dc0b 100644 --- a/gfx/drivers/omap_gfx.c +++ b/gfx/drivers/omap_gfx.c @@ -1099,6 +1099,7 @@ static float omap_get_refresh_rate(void *data) } static const video_poke_interface_t omap_gfx_poke_interface = { + NULL, /* get_metrics */ NULL, /* get_flags */ NULL, NULL, diff --git a/gfx/drivers/ps2_gfx.c b/gfx/drivers/ps2_gfx.c index a0a4109c6a..c008e88c48 100644 --- a/gfx/drivers/ps2_gfx.c +++ b/gfx/drivers/ps2_gfx.c @@ -407,11 +407,12 @@ static bool ps2_get_hw_render_interface(void* data, } static const video_poke_interface_t ps2_poke_interface = { + NULL, /* get_metrics */ NULL, /* get_flags */ NULL, NULL, NULL, - NULL, /* get_refresh_rate */ + NULL, /* get_refresh_rate */ ps2_set_filtering, NULL, /* get_video_output_size */ NULL, /* get_video_output_prev */ diff --git a/gfx/drivers/psp1_gfx.c b/gfx/drivers/psp1_gfx.c index ecaa3a9c5f..835891e9df 100644 --- a/gfx/drivers/psp1_gfx.c +++ b/gfx/drivers/psp1_gfx.c @@ -783,6 +783,7 @@ static uint32_t psp_get_flags(void *data) } static const video_poke_interface_t psp_poke_interface = { + NULL, /* get_metrics */ psp_get_flags, NULL, NULL, diff --git a/gfx/drivers/sdl2_gfx.c b/gfx/drivers/sdl2_gfx.c index b9703b1db2..4f15f3653e 100644 --- a/gfx/drivers/sdl2_gfx.c +++ b/gfx/drivers/sdl2_gfx.c @@ -698,6 +698,7 @@ static void sdl2_grab_mouse_toggle(void *data) static uint32_t sdl2_get_flags(void *data) { return 0; } static video_poke_interface_t sdl2_video_poke_interface = { + NULL, /* get_metrics */ sdl2_get_flags, NULL, NULL, diff --git a/gfx/drivers/sdl_dingux_gfx.c b/gfx/drivers/sdl_dingux_gfx.c index 63e93a0721..f9eb98ce7c 100644 --- a/gfx/drivers/sdl_dingux_gfx.c +++ b/gfx/drivers/sdl_dingux_gfx.c @@ -266,6 +266,7 @@ static void sdl_dingux_apply_state_changes(void *data) { } static uint32_t sdl_dingux_get_flags(void *data) { return 0; } static const video_poke_interface_t sdl_dingux_poke_interface = { + NULL, /* get_metrics */ sdl_dingux_get_flags, NULL, NULL, diff --git a/gfx/drivers/sdl_gfx.c b/gfx/drivers/sdl_gfx.c index ca498c48fe..d75f24b288 100644 --- a/gfx/drivers/sdl_gfx.c +++ b/gfx/drivers/sdl_gfx.c @@ -521,6 +521,7 @@ static uint32_t sdl_get_flags(void *data) } static const video_poke_interface_t sdl_poke_interface = { + NULL, /* get_metrics */ sdl_get_flags, NULL, NULL, diff --git a/gfx/drivers/sixel_gfx.c b/gfx/drivers/sixel_gfx.c index 89d0641019..6ad6fb9dc7 100644 --- a/gfx/drivers/sixel_gfx.c +++ b/gfx/drivers/sixel_gfx.c @@ -516,7 +516,8 @@ static void sixel_set_video_mode(void *data, unsigned width, unsigned height, bool fullscreen) { } static const video_poke_interface_t sixel_poke_interface = { - NULL, + NULL, /* get_metrics */ + NULL, /* get_flags */ NULL, NULL, sixel_set_video_mode, diff --git a/gfx/drivers/sunxi_gfx.c b/gfx/drivers/sunxi_gfx.c index 92bacc2406..1215ed3cf8 100644 --- a/gfx/drivers/sunxi_gfx.c +++ b/gfx/drivers/sunxi_gfx.c @@ -932,6 +932,7 @@ static float sunxi_get_refresh_rate (void *data) } static const video_poke_interface_t sunxi_poke_interface = { + NULL, /* get_metrics */ NULL, /* get_flags */ NULL, NULL, diff --git a/gfx/drivers/switch_gfx.c b/gfx/drivers/switch_gfx.c index d8a42ed9a2..ef9f8e7f1e 100644 --- a/gfx/drivers/switch_gfx.c +++ b/gfx/drivers/switch_gfx.c @@ -377,6 +377,7 @@ static void switch_set_texture_enable(void *data, bool enable, bool full_screen) } static const video_poke_interface_t switch_poke_interface = { + NULL, /* get_metrics */ NULL, /* get_flags */ NULL, /* load_texture */ NULL, /* unload_texture */ diff --git a/gfx/drivers/switch_nx_gfx.c b/gfx/drivers/switch_nx_gfx.c index e5c92f2b12..14d007ef71 100644 --- a/gfx/drivers/switch_nx_gfx.c +++ b/gfx/drivers/switch_nx_gfx.c @@ -652,27 +652,28 @@ void switch_overlay_interface(void *data, const video_overlay_interface_t **ifac #endif static const video_poke_interface_t switch_poke_interface = { - NULL, /* get_flags */ - NULL, /* load_texture */ - NULL, /* unload_texture */ - NULL, /* set_video_mode */ - NULL, /* get_refresh_rate */ - NULL, /* set_filtering */ - NULL, /* get_video_output_size */ - NULL, /* get_video_output_prev */ - NULL, /* get_video_output_next */ - NULL, /* get_current_framebuffer */ - NULL, /* get_proc_address */ - switch_set_aspect_ratio, /* set_aspect_ratio */ - switch_apply_state_changes, /* apply_state_changes */ - switch_set_texture_frame, - switch_set_texture_enable, - font_driver_render_msg, - NULL, /* show_mouse */ - NULL, /* grab_mouse_toggle */ - NULL, /* get_current_shader */ - NULL, /* get_current_software_framebuffer */ - NULL, /* get_hw_render_interface */ + NULL, /* get_metrics */ + NULL, /* get_flags */ + NULL, /* load_texture */ + NULL, /* unload_texture */ + NULL, /* set_video_mode */ + NULL, /* get_refresh_rate */ + NULL, /* set_filtering */ + NULL, /* get_video_output_size */ + NULL, /* get_video_output_prev */ + NULL, /* get_video_output_next */ + NULL, /* get_current_framebuffer */ + NULL, /* get_proc_address */ + switch_set_aspect_ratio, /* set_aspect_ratio */ + switch_apply_state_changes, /* apply_state_changes */ + switch_set_texture_frame, + switch_set_texture_enable, + font_driver_render_msg, + NULL, /* show_mouse */ + NULL, /* grab_mouse_toggle */ + NULL, /* get_current_shader */ + NULL, /* get_current_software_framebuffer */ + NULL, /* get_hw_render_interface */ }; static void switch_get_poke_interface(void *data, diff --git a/gfx/drivers/vg.c b/gfx/drivers/vg.c index 689bd36e6c..5ec18ac286 100644 --- a/gfx/drivers/vg.c +++ b/gfx/drivers/vg.c @@ -483,10 +483,49 @@ static bool vg_suppress_screensaver(void *data, bool enable) return false; } +static bool vg_get_metrics(void *data, enum display_metric_types type, + float *value) +{ + vg_t *vg = (vg_t*)data; + if (vg && vg->ctx_data && + vg->ctx_driver && vg->ctx_driver->get_metrics) + return vg->ctx_driver->get_metrics(vg->ctx_data, type, value); + return false; +} + +static const video_poke_interface_t vg_poke_interface = { + vg_get_metrics, /* get_metrics */ + NULL, /* get_flags */ + NULL, /* load_texture */ + NULL, /* unload_texture */ + NULL, /* set_video_mode */ + NULL, /* get_refresh_rate */ + NULL, + NULL, /* get_video_output_size */ + NULL, /* get_video_output_prev */ + NULL, /* get_video_output_next */ + NULL, /* get_current_framebuffer */ + NULL, /* get_proc_address */ + NULL, /* set_aspect_ratio */ + NULL, /* apply_state_changes */ + NULL, /* set_texture_frame */ + NULL, /* set_texture_enable */ + NULL, /* render_msg */ + NULL, /* show_mouse */ + NULL, + NULL, /* get_current_shader */ + NULL, /* get_current_software_framebuffer */ + NULL /* get_hw_render_interface */ +}; + static bool vg_set_shader(void *data, enum rarch_shader_type type, const char *path) { return false; } + static void vg_get_poke_interface(void *data, - const video_poke_interface_t **iface) { } + const video_poke_interface_t **iface) +{ + *iface = &vg_poke_interface; +} static bool vg_has_windowed(void *data) { diff --git a/gfx/drivers/vga_gfx.c b/gfx/drivers/vga_gfx.c index 3bedcc35b9..bb23ba76e2 100644 --- a/gfx/drivers/vga_gfx.c +++ b/gfx/drivers/vga_gfx.c @@ -359,6 +359,7 @@ static void vga_set_texture_frame(void *data, static uint32_t vga_get_flags(void *data) { return 0; } static const video_poke_interface_t vga_poke_interface = { + NULL, /* get_metrics */ vga_get_flags, NULL, NULL, diff --git a/gfx/drivers/vita2d_gfx.c b/gfx/drivers/vita2d_gfx.c index ce9e0567f7..4556022352 100644 --- a/gfx/drivers/vita2d_gfx.c +++ b/gfx/drivers/vita2d_gfx.c @@ -775,6 +775,7 @@ static uint32_t vita_get_flags(void *data) } static const video_poke_interface_t vita_poke_interface = { + NULL, /* get_metrics */ vita_get_flags, vita_load_texture, vita_unload_texture, diff --git a/gfx/drivers/vulkan.c b/gfx/drivers/vulkan.c index 07ac8238f9..855dc00743 100644 --- a/gfx/drivers/vulkan.c +++ b/gfx/drivers/vulkan.c @@ -2567,7 +2567,20 @@ static void vulkan_get_video_output_next(void *data) vk->ctx_driver->get_video_output_next(vk->ctx_data); } +static bool vulkan_get_metrics(void *data, enum display_metric_types type, + float *value) +{ + vk_t *vk = (vk_t*)data; + if ( vk + && vk->ctx_data + && vk->ctx_driver + && vk->ctx_driver->get_metrics) + return vk->ctx_driver->get_metrics(vk->ctx_data, type, value); + return false; +} + static const video_poke_interface_t vulkan_poke_interface = { + vulkan_get_metrics, vulkan_get_flags, vulkan_load_texture, vulkan_unload_texture, diff --git a/gfx/drivers/xshm_gfx.c b/gfx/drivers/xshm_gfx.c index 290a291498..154575daf3 100644 --- a/gfx/drivers/xshm_gfx.c +++ b/gfx/drivers/xshm_gfx.c @@ -179,6 +179,7 @@ static void xshm_show_mouse(void *data, bool state) { } static void xshm_grab_mouse_toggle(void *data) { } static video_poke_interface_t xshm_video_poke_interface = { + NULL, /* get_metrics */ NULL, /* get_flags */ NULL, NULL, diff --git a/gfx/drivers/xvideo.c b/gfx/drivers/xvideo.c index 7fb460aa49..cb3a3c3ad6 100644 --- a/gfx/drivers/xvideo.c +++ b/gfx/drivers/xvideo.c @@ -1092,6 +1092,7 @@ static void xv_viewport_info(void *data, struct video_viewport *vp) static uint32_t xv_get_flags(void *data) { return 0; } static video_poke_interface_t xv_video_poke_interface = { + NULL, /* get_metrics */ xv_get_flags, NULL, NULL, diff --git a/gfx/gfx_display.c b/gfx/gfx_display.c index 3f67fadba5..58aa3c51bf 100644 --- a/gfx/gfx_display.c +++ b/gfx/gfx_display.c @@ -299,7 +299,7 @@ float gfx_display_get_dpi_scale_internal(unsigned width, unsigned height) diagonal_pixels = (float)sqrt( (double)((width * width) + (height * height))); - /* TODO/FIXME: On Mac, calling video_context_driver_get_metrics() + /* TODO/FIXME: On Mac, calling video_driver_get_metrics() * here causes RetroArch to crash (EXC_BAD_ACCESS). This is * unfortunate, and needs to be fixed at the gfx context driver * level. Until this is done, all we can do is fallback to using @@ -322,7 +322,7 @@ float gfx_display_get_dpi_scale_internal(unsigned width, unsigned height) metrics.type = DISPLAY_METRIC_DPI; metrics.value = &dpi; - if (video_context_driver_get_metrics(&metrics) && (dpi > 0.0f)) + if (video_driver_get_metrics(&metrics) && (dpi > 0.0f)) { float display_size; float dpi_scale; @@ -433,7 +433,7 @@ float gfx_display_get_dpi_scale(unsigned width, unsigned height) /* Scale is based on display metrics - these are a fixed * hardware property. To minimise performance overheads - * we therefore only call video_context_driver_get_metrics() + * we therefore only call video_driver_get_metrics() * on first run, or when the current video resolution changes */ if (!scale_cached || (width != last_width) || @@ -498,7 +498,7 @@ float gfx_display_get_widget_dpi_scale( /* Scale is based on display metrics - these are a fixed * hardware property. To minimise performance overheads - * we therefore only call video_context_driver_get_metrics() + * we therefore only call video_driver_get_metrics() * on first run, or when the current video resolution changes */ if (!scale_cached || (width != last_width) || diff --git a/gfx/video_thread_wrapper.c b/gfx/video_thread_wrapper.c index 8bf94c1e00..400dee16f1 100644 --- a/gfx/video_thread_wrapper.c +++ b/gfx/video_thread_wrapper.c @@ -1260,6 +1260,15 @@ static struct video_shader *thread_get_current_shader(void *data) return thr->poke->get_current_shader(thr->driver_data); } +static bool thread_get_metrics(void *data, enum display_metric_types type, + float *value) +{ + thread_video_t *thr = (thread_video_t*)data; + if (!thr || !thr->poke || !thr->poke->get_metrics) + return false; + return thr->poke->get_metrics(thr->driver_data, type, value); +} + static uint32_t thread_get_flags(void *data) { thread_video_t *thr = (thread_video_t*)data; @@ -1269,6 +1278,7 @@ static uint32_t thread_get_flags(void *data) } static const video_poke_interface_t thread_poke = { + thread_get_metrics, thread_get_flags, thread_load_texture, thread_unload_texture, diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 90094bef05..32b7ce2685 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -1255,7 +1255,7 @@ static unsigned menu_displaylist_parse_system_info(file_list_t *list) metrics.type = DISPLAY_METRIC_MM_WIDTH; metrics.value = &val; - if (video_context_driver_get_metrics(&metrics)) + if (video_driver_get_metrics(&metrics)) { snprintf(tmp, sizeof(tmp), "%s: %.2f", msg_hash_to_str( @@ -1269,7 +1269,7 @@ static unsigned menu_displaylist_parse_system_info(file_list_t *list) metrics.type = DISPLAY_METRIC_MM_HEIGHT; - if (video_context_driver_get_metrics(&metrics)) + if (video_driver_get_metrics(&metrics)) { snprintf(tmp, sizeof(tmp), "%s: %.2f", msg_hash_to_str( @@ -1283,7 +1283,7 @@ static unsigned menu_displaylist_parse_system_info(file_list_t *list) metrics.type = DISPLAY_METRIC_DPI; - if (video_context_driver_get_metrics(&metrics)) + if (video_driver_get_metrics(&metrics)) { snprintf(tmp, sizeof(tmp), "%s: %.2f", msg_hash_to_str( diff --git a/retroarch.c b/retroarch.c index d71f98752d..35d1685ba7 100644 --- a/retroarch.c +++ b/retroarch.c @@ -25237,19 +25237,21 @@ static float menu_input_get_dpi(struct rarch_state *p_rarch) /* Regardless of menu driver, need 'actual' screen DPI * Note: DPI is a fixed hardware property. To minimise performance - * overheads we therefore only call video_context_driver_get_metrics() + * overheads we therefore only call video_driver_get_metrics() * on first run, or when the current video resolution changes */ if (!dpi_cached || (p_rarch->video_driver_width != last_video_width) || (p_rarch->video_driver_height != last_video_height)) { - /* Note: If video_context_driver_get_metrics() fails, + struct gfx_ctx_metrics metrs; + /* Note: If video_driver_get_metrics() fails, * we don't know what happened to dpi - so ensure it * is reset to a sane value */ - if (!p_rarch->current_video_context.get_metrics( - p_rarch->video_context_data, - DISPLAY_METRIC_DPI, - &dpi)) + + metrs.type = DISPLAY_METRIC_DPI; + metrs.value = &dpi; + + if (!video_driver_get_metrics(&metrs)) dpi = 0.0f; dpi_cached = true; @@ -30784,8 +30786,6 @@ bool video_driver_started_fullscreen(void) /* Stub functions */ -static bool get_metrics_null(void *data, enum display_metric_types type, - float *value) { return false; } static bool set_resize_null(void *a, unsigned b, unsigned c) { return false; } /** @@ -30889,9 +30889,6 @@ static void video_context_driver_reset(void) { struct rarch_state *p_rarch = &rarch_st; - if (!p_rarch->current_video_context.get_metrics) - p_rarch->current_video_context.get_metrics = get_metrics_null; - if (!p_rarch->current_video_context.set_resize) p_rarch->current_video_context.set_resize = set_resize_null; } @@ -30919,7 +30916,7 @@ void video_context_driver_destroy(void) p_rarch->current_video_context.get_video_output_size = NULL; p_rarch->current_video_context.get_video_output_prev = NULL; p_rarch->current_video_context.get_video_output_next = NULL; - p_rarch->current_video_context.get_metrics = get_metrics_null; + p_rarch->current_video_context.get_metrics = NULL; p_rarch->current_video_context.translate_aspect = NULL; p_rarch->current_video_context.update_window_title = NULL; p_rarch->current_video_context.check_window = NULL; @@ -33495,10 +33492,12 @@ void video_context_driver_free(void) p_rarch->video_context_data = NULL; } -bool video_context_driver_get_metrics(gfx_ctx_metrics_t *metrics) +bool video_driver_get_metrics(gfx_ctx_metrics_t *metrics) { struct rarch_state *p_rarch = &rarch_st; - return p_rarch->current_video_context.get_metrics( + if (!p_rarch->video_driver_poke || !p_rarch->video_driver_poke->get_metrics) + return false; + return p_rarch->video_driver_poke->get_metrics( p_rarch->video_context_data, metrics->type, metrics->value); diff --git a/retroarch.h b/retroarch.h index af4bb44290..4b0955a18f 100644 --- a/retroarch.h +++ b/retroarch.h @@ -1380,6 +1380,7 @@ struct aspect_ratio_elem typedef struct video_poke_interface { + get_metrics_cb get_metrics; uint32_t (*get_flags)(void *data); uintptr_t (*load_texture)(void *video_data, void *data, bool threaded, enum texture_filter_type filter_type); @@ -1781,7 +1782,7 @@ bool video_context_driver_get_refresh_rate(float *refresh_rate); bool video_context_driver_set_flags(gfx_ctx_flags_t *flags); -bool video_context_driver_get_metrics(gfx_ctx_metrics_t *metrics); +bool video_driver_get_metrics(gfx_ctx_metrics_t *metrics); bool video_context_driver_input_driver(gfx_ctx_input_t *inp);