diff --git a/gfx/drivers/caca_gfx.c b/gfx/drivers/caca_gfx.c index a7028cac17..584a46eb1a 100644 --- a/gfx/drivers/caca_gfx.c +++ b/gfx/drivers/caca_gfx.c @@ -359,6 +359,9 @@ video_driver_t video_caca = { #ifdef HAVE_OVERLAY NULL, /* overlay_interface */ +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif caca_gfx_get_poke_interface, NULL /* wrap_type_to_enum */ diff --git a/gfx/drivers/ctr_gfx.c b/gfx/drivers/ctr_gfx.c index 20408de70b..16c1502204 100644 --- a/gfx/drivers/ctr_gfx.c +++ b/gfx/drivers/ctr_gfx.c @@ -1289,6 +1289,9 @@ video_driver_t video_ctr = NULL, /* read_frame_raw */ #ifdef HAVE_OVERLAY NULL, +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif ctr_get_poke_interface }; diff --git a/gfx/drivers/d3d10.c b/gfx/drivers/d3d10.c index ae6f721078..655694f0ce 100644 --- a/gfx/drivers/d3d10.c +++ b/gfx/drivers/d3d10.c @@ -1753,6 +1753,9 @@ video_driver_t video_d3d10 = { #ifdef HAVE_OVERLAY d3d10_get_overlay_interface, +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif d3d10_gfx_get_poke_interface, NULL, /* d3d10_wrap_type_to_enum */ diff --git a/gfx/drivers/d3d11.c b/gfx/drivers/d3d11.c index 924e80b011..df9e75daaf 100644 --- a/gfx/drivers/d3d11.c +++ b/gfx/drivers/d3d11.c @@ -1815,6 +1815,9 @@ video_driver_t video_d3d11 = { #ifdef HAVE_OVERLAY d3d11_get_overlay_interface, +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif d3d11_gfx_get_poke_interface, NULL, /* d3d11_wrap_type_to_enum */ diff --git a/gfx/drivers/d3d12.c b/gfx/drivers/d3d12.c index fbc6af4ac2..b0066a76f8 100644 --- a/gfx/drivers/d3d12.c +++ b/gfx/drivers/d3d12.c @@ -1863,6 +1863,9 @@ video_driver_t video_d3d12 = { #ifdef HAVE_OVERLAY d3d12_get_overlay_interface, +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif d3d12_gfx_get_poke_interface, NULL, /* d3d12_wrap_type_to_enum */ diff --git a/gfx/drivers/d3d8.c b/gfx/drivers/d3d8.c index f5d34bfb4f..750ad49cd1 100644 --- a/gfx/drivers/d3d8.c +++ b/gfx/drivers/d3d8.c @@ -1904,6 +1904,9 @@ video_driver_t video_d3d8 = { NULL, /* read_frame_raw */ #ifdef HAVE_OVERLAY d3d8_get_overlay_interface, +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif d3d8_get_poke_interface }; diff --git a/gfx/drivers/d3d9.c b/gfx/drivers/d3d9.c index e8797b092f..98cca8a177 100644 --- a/gfx/drivers/d3d9.c +++ b/gfx/drivers/d3d9.c @@ -2121,6 +2121,9 @@ video_driver_t video_d3d9 = { NULL, /* read_frame_raw */ #ifdef HAVE_OVERLAY d3d9_get_overlay_interface, +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif d3d9_get_poke_interface, NULL, /* wrap_type_to_enum */ diff --git a/gfx/drivers/dispmanx_gfx.c b/gfx/drivers/dispmanx_gfx.c index 0d4e7f2351..58b6ed0b21 100644 --- a/gfx/drivers/dispmanx_gfx.c +++ b/gfx/drivers/dispmanx_gfx.c @@ -711,6 +711,9 @@ video_driver_t video_dispmanx = { #ifdef HAVE_OVERLAY NULL, /* overlay_interface */ +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif dispmanx_gfx_get_poke_interface }; diff --git a/gfx/drivers/drm_gfx.c b/gfx/drivers/drm_gfx.c index 41a99df738..88a773e184 100644 --- a/gfx/drivers/drm_gfx.c +++ b/gfx/drivers/drm_gfx.c @@ -1036,6 +1036,9 @@ video_driver_t video_drm = { #ifdef HAVE_OVERLAY NULL, /* overlay_interface */ +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif drm_gfx_get_poke_interface }; diff --git a/gfx/drivers/exynos_gfx.c b/gfx/drivers/exynos_gfx.c index 6e919ccf98..d52a0af995 100644 --- a/gfx/drivers/exynos_gfx.c +++ b/gfx/drivers/exynos_gfx.c @@ -1555,6 +1555,9 @@ video_driver_t video_exynos = { #ifdef HAVE_OVERLAY NULL, /* overlay_interface */ +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif exynos_gfx_get_poke_interface }; diff --git a/gfx/drivers/gdi_gfx.c b/gfx/drivers/gdi_gfx.c index 77aa766684..26cdb1acfc 100644 --- a/gfx/drivers/gdi_gfx.c +++ b/gfx/drivers/gdi_gfx.c @@ -696,6 +696,9 @@ video_driver_t video_gdi = { #ifdef HAVE_OVERLAY NULL, /* overlay_interface */ +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif gdi_gfx_get_poke_interface, }; diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index 118a06a316..d427e75f22 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -4233,6 +4233,9 @@ video_driver_t video_gl2 = { #ifdef HAVE_OVERLAY gl2_get_overlay_interface, +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif gl2_get_poke_interface, gl2_wrap_type_to_enum, diff --git a/gfx/drivers/gl1.c b/gfx/drivers/gl1.c index 01b1e0421b..bf01ad9da6 100644 --- a/gfx/drivers/gl1.c +++ b/gfx/drivers/gl1.c @@ -1544,6 +1544,9 @@ video_driver_t video_gl1 = { #ifdef HAVE_OVERLAY gl1_get_overlay_interface, +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif gl1_gfx_get_poke_interface, gl1_wrap_type_to_enum, diff --git a/gfx/drivers/gl_core.c b/gfx/drivers/gl_core.c index 22b4a84a33..de5b6e8f21 100644 --- a/gfx/drivers/gl_core.c +++ b/gfx/drivers/gl_core.c @@ -2057,6 +2057,9 @@ video_driver_t video_gl_core = { #ifdef HAVE_OVERLAY gl_core_get_overlay_interface, +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif gl_core_get_poke_interface, gl_core_wrap_type_to_enum, diff --git a/gfx/drivers/gx2_gfx.c b/gfx/drivers/gx2_gfx.c index c345cbd8b8..4daf32a60d 100644 --- a/gfx/drivers/gx2_gfx.c +++ b/gfx/drivers/gx2_gfx.c @@ -1777,6 +1777,9 @@ video_driver_t video_wiiu = NULL, /* read_frame_raw */ #ifdef HAVE_OVERLAY gx2_get_overlay_interface, /* overlay_interface */ +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif wiiu_gfx_get_poke_interface, NULL, /* wrap_type_to_enum */ diff --git a/gfx/drivers/gx_gfx.c b/gfx/drivers/gx_gfx.c index 71f78bcabf..42fd7999a5 100644 --- a/gfx/drivers/gx_gfx.c +++ b/gfx/drivers/gx_gfx.c @@ -1683,6 +1683,9 @@ video_driver_t video_gx = { NULL, /* read_frame_raw */ #ifdef HAVE_OVERLAY gx_get_overlay_interface, +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif gx_get_poke_interface, }; diff --git a/gfx/drivers/metal.m b/gfx/drivers/metal.m index eb8b375616..c510250256 100644 --- a/gfx/drivers/metal.m +++ b/gfx/drivers/metal.m @@ -452,6 +452,9 @@ video_driver_t video_metal = { NULL, /* read_frame_raw */ #ifdef HAVE_OVERLAY metal_get_overlay_interface, +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif metal_get_poke_interface, NULL, /* metal_wrap_type_to_enum */ diff --git a/gfx/drivers/nullgfx.c b/gfx/drivers/nullgfx.c index 181c263003..82de4f29dc 100644 --- a/gfx/drivers/nullgfx.c +++ b/gfx/drivers/nullgfx.c @@ -139,6 +139,9 @@ video_driver_t video_null = { #ifdef HAVE_OVERLAY NULL, /* overlay_interface */ +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif null_gfx_get_poke_interface, }; diff --git a/gfx/drivers/omap_gfx.c b/gfx/drivers/omap_gfx.c index c202f16ae3..7498878a30 100644 --- a/gfx/drivers/omap_gfx.c +++ b/gfx/drivers/omap_gfx.c @@ -1186,6 +1186,9 @@ video_driver_t video_omap = { #ifdef HAVE_OVERLAY NULL, /* overlay_interface */ +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif omap_gfx_get_poke_interface }; diff --git a/gfx/drivers/ps2_gfx.c b/gfx/drivers/ps2_gfx.c index ff6db846e0..14ac1bb923 100644 --- a/gfx/drivers/ps2_gfx.c +++ b/gfx/drivers/ps2_gfx.c @@ -518,6 +518,9 @@ video_driver_t video_ps2 = { #ifdef HAVE_OVERLAY NULL, /* overlay_interface */ +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif ps2_gfx_get_poke_interface, }; diff --git a/gfx/drivers/psp1_gfx.c b/gfx/drivers/psp1_gfx.c index 15d4213b02..d3a639338a 100644 --- a/gfx/drivers/psp1_gfx.c +++ b/gfx/drivers/psp1_gfx.c @@ -981,6 +981,9 @@ video_driver_t video_psp1 = { NULL, /* read_frame_raw */ #ifdef HAVE_OVERLAY NULL, +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif psp_get_poke_interface }; diff --git a/gfx/drivers/sdl2_gfx.c b/gfx/drivers/sdl2_gfx.c index b0195de5a7..9c2faca801 100644 --- a/gfx/drivers/sdl2_gfx.c +++ b/gfx/drivers/sdl2_gfx.c @@ -790,6 +790,9 @@ video_driver_t video_sdl2 = { NULL, /* read_frame_raw */ #ifdef HAVE_OVERLAY NULL, +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif sdl2_gfx_poke_interface }; diff --git a/gfx/drivers/sdl_gfx.c b/gfx/drivers/sdl_gfx.c index fabe1ef37f..120b4ebb53 100644 --- a/gfx/drivers/sdl_gfx.c +++ b/gfx/drivers/sdl_gfx.c @@ -598,6 +598,9 @@ video_driver_t video_sdl = { NULL, /* read_frame_raw */ #ifdef HAVE_OVERLAY NULL, +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif sdl_get_poke_interface }; diff --git a/gfx/drivers/sixel_gfx.c b/gfx/drivers/sixel_gfx.c index e2c6724e4e..7f740efc8d 100644 --- a/gfx/drivers/sixel_gfx.c +++ b/gfx/drivers/sixel_gfx.c @@ -664,6 +664,9 @@ video_driver_t video_sixel = { NULL, /* read_frame_raw */ #ifdef HAVE_OVERLAY NULL, /* overlay_interface */ +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif sixel_gfx_get_poke_interface, NULL /* wrap_type_to_enum */ diff --git a/gfx/drivers/sunxi_gfx.c b/gfx/drivers/sunxi_gfx.c index 3f72e4158c..f99d83ba01 100644 --- a/gfx/drivers/sunxi_gfx.c +++ b/gfx/drivers/sunxi_gfx.c @@ -992,6 +992,9 @@ video_driver_t video_sunxi = { #ifdef HAVE_OVERLAY NULL, /* overlay_interface */ +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif sunxi_gfx_get_poke_interface }; diff --git a/gfx/drivers/switch_gfx.c b/gfx/drivers/switch_gfx.c index cedad20ed9..c3dd3f674b 100644 --- a/gfx/drivers/switch_gfx.c +++ b/gfx/drivers/switch_gfx.c @@ -453,6 +453,9 @@ video_driver_t video_switch = { NULL, /* read_frame_raw */ #ifdef HAVE_OVERLAY NULL, /* overlay_interface */ +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif switch_get_poke_interface, }; diff --git a/gfx/drivers/switch_nx_gfx.c b/gfx/drivers/switch_nx_gfx.c index 44cc61cfa8..c2e35c5821 100644 --- a/gfx/drivers/switch_nx_gfx.c +++ b/gfx/drivers/switch_nx_gfx.c @@ -802,6 +802,9 @@ video_driver_t video_switch = { NULL, /* read_frame_raw */ #ifdef HAVE_OVERLAY switch_overlay_interface, /* switch_overlay_interface */ +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif switch_get_poke_interface, }; diff --git a/gfx/drivers/vg.c b/gfx/drivers/vg.c index 1813452e25..f9aeb8fa62 100644 --- a/gfx/drivers/vg.c +++ b/gfx/drivers/vg.c @@ -519,6 +519,9 @@ video_driver_t video_vg = { NULL, /* read_frame_raw */ #ifdef HAVE_OVERLAY NULL, /* overlay_interface */ +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif vg_get_poke_interface }; diff --git a/gfx/drivers/vga_gfx.c b/gfx/drivers/vga_gfx.c index 2be23f0d41..c25b3a6bcf 100644 --- a/gfx/drivers/vga_gfx.c +++ b/gfx/drivers/vga_gfx.c @@ -451,6 +451,9 @@ video_driver_t video_vga = { #ifdef HAVE_OVERLAY NULL, /* overlay_interface */ +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif vga_gfx_get_poke_interface, }; diff --git a/gfx/drivers/vita2d_gfx.c b/gfx/drivers/vita2d_gfx.c index d74f899d00..db6e0ba562 100644 --- a/gfx/drivers/vita2d_gfx.c +++ b/gfx/drivers/vita2d_gfx.c @@ -983,6 +983,9 @@ video_driver_t video_vita2d = { NULL, /* read_frame_raw */ #ifdef HAVE_OVERLAY vita2d_get_overlay_interface, +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif vita2d_gfx_get_poke_interface, }; diff --git a/gfx/drivers/vulkan.c b/gfx/drivers/vulkan.c index 328fc5c2cc..77148c97e4 100644 --- a/gfx/drivers/vulkan.c +++ b/gfx/drivers/vulkan.c @@ -2816,6 +2816,9 @@ video_driver_t video_vulkan = { #ifdef HAVE_OVERLAY vulkan_get_overlay_interface, +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif vulkan_get_poke_interface, NULL, /* vulkan_wrap_type_to_enum */ diff --git a/gfx/drivers/xenon360_gfx.c b/gfx/drivers/xenon360_gfx.c index 019259a060..5f3dbb5f9a 100644 --- a/gfx/drivers/xenon360_gfx.c +++ b/gfx/drivers/xenon360_gfx.c @@ -326,6 +326,9 @@ video_driver_t video_xenon360 = { #ifdef HAVE_OVERLAY NULL, /* overlay_interface */ +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif xenon360_gfx_get_poke_interface }; diff --git a/gfx/drivers/xshm_gfx.c b/gfx/drivers/xshm_gfx.c index ed6033fae7..74cba41c81 100644 --- a/gfx/drivers/xshm_gfx.c +++ b/gfx/drivers/xshm_gfx.c @@ -262,6 +262,9 @@ video_driver_t video_xshm = { NULL, /* read_frame_raw */ #ifdef HAVE_OVERLAY NULL, +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif xshm_gfx_poke_interface }; diff --git a/gfx/drivers/xvideo.c b/gfx/drivers/xvideo.c index 7440e8a1e2..36cde06a20 100644 --- a/gfx/drivers/xvideo.c +++ b/gfx/drivers/xvideo.c @@ -1000,6 +1000,9 @@ video_driver_t video_xvideo = { NULL, /* read_frame_raw */ #ifdef HAVE_OVERLAY NULL, /* overlay_interface */ +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif xv_get_poke_interface }; diff --git a/gfx/video_driver.c b/gfx/video_driver.c index 369664fa43..aa7da41263 100644 --- a/gfx/video_driver.c +++ b/gfx/video_driver.c @@ -52,6 +52,10 @@ #endif #endif +#ifdef HAVE_VIDEO_LAYOUT +#include "video_layout.h" +#endif + #include "video_thread_wrapper.h" #include "video_driver.h" #include "video_display_server.h" @@ -1214,6 +1218,16 @@ bool video_driver_overlay_interface(const video_overlay_interface_t **iface) } #endif +#ifdef HAVE_VIDEO_LAYOUT +const video_layout_render_interface_t *video_driver_layout_render_interface(void) +{ + if (!current_video) + return NULL; + + return current_video->video_layout_render_interface(video_driver_data); +} +#endif + void *video_driver_read_frame_raw(unsigned *width, unsigned *height, size_t *pitch) { diff --git a/gfx/video_driver.h b/gfx/video_driver.h index ec1ac14e83..927d8946ad 100644 --- a/gfx/video_driver.h +++ b/gfx/video_driver.h @@ -34,6 +34,10 @@ #include "../input/input_overlay.h" #endif +#ifdef HAVE_VIDEO_LAYOUT +#include "video_layout.h" +#endif + #include "video_defines.h" #include "video_coord_array.h" #include "video_filter.h" @@ -798,6 +802,9 @@ typedef struct video_driver #ifdef HAVE_OVERLAY void (*overlay_interface)(void *data, const video_overlay_interface_t **iface); +#endif +#ifdef HAVE_VIDEO_LAYOUT + const video_layout_render_interface_t *(*video_layout_render_interface)(void *data); #endif void (*poke_interface)(void *data, const video_poke_interface_t **iface); unsigned (*wrap_type_to_enum)(enum gfx_wrap_type type); @@ -950,6 +957,10 @@ bool video_driver_overlay_interface( const video_overlay_interface_t **iface); #endif +#ifdef HAVE_VIDEO_LAYOUT +const video_layout_render_interface_t *video_driver_layout_render_interface(void); +#endif + void * video_driver_read_frame_raw(unsigned *width, unsigned *height, size_t *pitch); diff --git a/gfx/video_thread_wrapper.c b/gfx/video_thread_wrapper.c index 85b0c60e75..b84dd1bc72 100644 --- a/gfx/video_thread_wrapper.c +++ b/gfx/video_thread_wrapper.c @@ -1310,6 +1310,9 @@ static const video_driver_t video_thread = { NULL, /* read_frame_raw */ #ifdef HAVE_OVERLAY video_thread_get_overlay_interface, /* get_overlay_interface */ +#endif +#ifdef HAVE_VIDEO_LAYOUT + NULL, #endif video_thread_get_poke_interface, NULL,