From 5aedc1c4cafbabb0d865fd4e9531e2d7d641e4be Mon Sep 17 00:00:00 2001 From: twinaphex Date: Thu, 19 Nov 2015 15:16:37 +0100 Subject: [PATCH] Create egl_set_swap_interval --- gfx/common/egl_common.c | 22 +++++++++++++++++++ gfx/common/egl_common.h | 3 +++ gfx/drivers_context/androidegl_ctx.c | 7 +----- gfx/drivers_context/bbqnx_ctx.c | 7 +----- gfx/drivers_context/mali_fbdev_ctx.c | 10 +-------- gfx/drivers_context/vc_egl_ctx.c | 19 ++-------------- gfx/drivers_context/vivante_fbdev_ctx.c | 17 ++------------- gfx/drivers_context/wayland_ctx.c | 29 ++----------------------- gfx/drivers_context/xegl_ctx.c | 23 ++------------------ 9 files changed, 36 insertions(+), 101 deletions(-) diff --git a/gfx/common/egl_common.c b/gfx/common/egl_common.c index 7a2cc9c5a0..977f90dfa7 100644 --- a/gfx/common/egl_common.c +++ b/gfx/common/egl_common.c @@ -27,6 +27,7 @@ EGLSurface g_egl_surf; EGLDisplay g_egl_dpy; EGLConfig g_egl_config; bool g_use_hw_ctx; +unsigned g_interval; void egl_report_error(void) { @@ -123,3 +124,24 @@ void egl_swap_buffers(void *data) { eglSwapBuffers(g_egl_dpy, g_egl_surf); } + +void egl_set_swap_interval(void *data, unsigned interval) +{ + /* Can be called before initialization. + * Some contexts require that swap interval + * is known at startup time. + */ + g_interval = interval; + + if (!g_egl_dpy) + return; + if (!(eglGetCurrentContext())) + return; + + RARCH_LOG("[EGL]: eglSwapInterval(%u)\n", interval); + if (!eglSwapInterval(g_egl_dpy, interval)) + { + RARCH_ERR("[EGL]: eglSwapInterval() failed.\n"); + egl_report_error(); + } +} diff --git a/gfx/common/egl_common.h b/gfx/common/egl_common.h index 450cee69c7..30a1a85da1 100644 --- a/gfx/common/egl_common.h +++ b/gfx/common/egl_common.h @@ -29,6 +29,7 @@ extern EGLSurface g_egl_surf; extern EGLDisplay g_egl_dpy; extern EGLConfig g_egl_config; extern bool g_use_hw_ctx; +extern unsigned g_interval; void egl_report_error(void); @@ -40,4 +41,6 @@ void egl_bind_hw_render(void *data, bool enable); void egl_swap_buffers(void *data); +void egl_set_swap_interval(void *data, unsigned interval); + #endif diff --git a/gfx/drivers_context/androidegl_ctx.c b/gfx/drivers_context/androidegl_ctx.c index 49aff8bbf7..88dba246ab 100644 --- a/gfx/drivers_context/androidegl_ctx.c +++ b/gfx/drivers_context/androidegl_ctx.c @@ -33,11 +33,6 @@ int system_property_get(const char *cmd, const char *args, char *value); static bool g_es3; -static void android_gfx_ctx_set_swap_interval(void *data, unsigned interval) -{ - eglSwapInterval(g_egl_dpy, interval); -} - static void android_gfx_ctx_destroy(void *data) { egl_destroy(); @@ -296,7 +291,7 @@ const gfx_ctx_driver_t gfx_ctx_android = { android_gfx_ctx_init, android_gfx_ctx_destroy, android_gfx_ctx_bind_api, - android_gfx_ctx_set_swap_interval, + egl_set_swap_interval, android_gfx_ctx_set_video_mode, android_gfx_ctx_get_video_size, NULL, /* get_video_output_size */ diff --git a/gfx/drivers_context/bbqnx_ctx.c b/gfx/drivers_context/bbqnx_ctx.c index b72f46d4bd..f2714cffe7 100644 --- a/gfx/drivers_context/bbqnx_ctx.c +++ b/gfx/drivers_context/bbqnx_ctx.c @@ -43,11 +43,6 @@ static screen_display_t screen_disp; static enum gfx_ctx_api g_api; -static void gfx_ctx_qnx_set_swap_interval(void *data, unsigned interval) -{ - eglSwapInterval(g_egl_dpy, interval); -} - static void gfx_ctx_qnx_destroy(void *data) { egl_destroy(); @@ -381,7 +376,7 @@ const gfx_ctx_driver_t gfx_ctx_bbqnx = { gfx_ctx_qnx_init, gfx_ctx_qnx_destroy, gfx_ctx_qnx_bind_api, - gfx_ctx_qnx_set_swap_interval, + egl_set_swap_interval, gfx_ctx_qnx_set_video_mode, gfx_ctx_qnx_get_video_size, NULL, /* get_video_output_size */ diff --git a/gfx/drivers_context/mali_fbdev_ctx.c b/gfx/drivers_context/mali_fbdev_ctx.c index d7daaa9a0f..4ed8d53835 100644 --- a/gfx/drivers_context/mali_fbdev_ctx.c +++ b/gfx/drivers_context/mali_fbdev_ctx.c @@ -43,14 +43,6 @@ static void gfx_ctx_mali_fbdev_sighandler(int sig) g_quit = 1; } -static void gfx_ctx_mali_fbdev_set_swap_interval( - void *data, unsigned interval) -{ - (void)data; - if (g_egl_dpy) - eglSwapInterval(g_egl_dpy, interval); -} - static void gfx_ctx_mali_fbdev_destroy(void *data) { int fb; @@ -282,7 +274,7 @@ const gfx_ctx_driver_t gfx_ctx_mali_fbdev = { gfx_ctx_mali_fbdev_init, gfx_ctx_mali_fbdev_destroy, gfx_ctx_mali_fbdev_bind_api, - gfx_ctx_mali_fbdev_set_swap_interval, + egl_set_swap_interval, gfx_ctx_mali_fbdev_set_video_mode, gfx_ctx_mali_fbdev_get_video_size, NULL, /* get_video_output_size */ diff --git a/gfx/drivers_context/vc_egl_ctx.c b/gfx/drivers_context/vc_egl_ctx.c index f7b07f10e0..6fd7c2f1ad 100644 --- a/gfx/drivers_context/vc_egl_ctx.c +++ b/gfx/drivers_context/vc_egl_ctx.c @@ -40,7 +40,6 @@ static volatile sig_atomic_t g_quit; static bool g_inited; -static unsigned g_interval; static enum gfx_ctx_api g_api; static unsigned g_fb_width; @@ -72,20 +71,6 @@ static void sighandler(int sig) g_quit = 1; } -static void gfx_ctx_vc_swap_interval(void *data, unsigned interval) -{ - (void)data; - - /* Can be called before initialization. - * Some contexts require that swap interval - * is known at startup time. - */ - g_interval = interval; - - if (g_egl_dpy) - eglSwapInterval(g_egl_dpy, interval); -} - static void gfx_ctx_vc_check_window(void *data, bool *quit, bool *resize, unsigned *width, unsigned *height, unsigned frame_count) { @@ -332,7 +317,7 @@ static bool gfx_ctx_vc_set_video_mode(void *data, sigaction(SIGINT, &sa, NULL); sigaction(SIGTERM, &sa, NULL); - gfx_ctx_vc_swap_interval(data, g_interval); + egl_set_swap_interval(data, g_interval); g_inited = true; @@ -607,7 +592,7 @@ const gfx_ctx_driver_t gfx_ctx_videocore = { gfx_ctx_vc_init, gfx_ctx_vc_destroy, gfx_ctx_vc_bind_api, - gfx_ctx_vc_swap_interval, + egl_set_swap_interval, gfx_ctx_vc_set_video_mode, gfx_ctx_vc_get_video_size, NULL, /* get_video_output_size */ diff --git a/gfx/drivers_context/vivante_fbdev_ctx.c b/gfx/drivers_context/vivante_fbdev_ctx.c index a5212d1077..dbfdeaad13 100644 --- a/gfx/drivers_context/vivante_fbdev_ctx.c +++ b/gfx/drivers_context/vivante_fbdev_ctx.c @@ -33,13 +33,6 @@ static void sighandler(int sig) g_quit = 1; } -static void gfx_ctx_vivante_set_swap_interval(void *data, unsigned interval) -{ - (void)data; - if (g_egl_dpy) - eglSwapInterval(g_egl_dpy, interval); -} - static void gfx_ctx_vivante_destroy(void *data) { (void)data; @@ -127,12 +120,6 @@ error: return false; } -static void gfx_ctx_vivante_swap_buffers(void *data) -{ - (void)data; - eglSwapBuffers(g_egl_dpy, g_egl_surf); -} - static void gfx_ctx_vivante_check_window(void *data, bool *quit, bool *resize, unsigned *width, unsigned *height, unsigned frame_count) { @@ -261,7 +248,7 @@ const gfx_ctx_driver_t gfx_ctx_vivante_fbdev = { gfx_ctx_vivante_init, gfx_ctx_vivante_destroy, gfx_ctx_vivante_bind_api, - gfx_ctx_vivante_set_swap_interval, + egl_set_swap_interval, gfx_ctx_vivante_set_video_mode, gfx_ctx_vivante_get_video_size, NULL, /* get_video_output_size */ @@ -275,7 +262,7 @@ const gfx_ctx_driver_t gfx_ctx_vivante_fbdev = { gfx_ctx_vivante_has_focus, gfx_ctx_vivante_suppress_screensaver, gfx_ctx_vivante_has_windowed, - gfx_ctx_vivante_swap_buffers, + egl_swap_buffers, gfx_ctx_vivante_input_driver, egl_get_proc_address, NULL, diff --git a/gfx/drivers_context/wayland_ctx.c b/gfx/drivers_context/wayland_ctx.c index 2843be5159..5cbc677ebc 100644 --- a/gfx/drivers_context/wayland_ctx.c +++ b/gfx/drivers_context/wayland_ctx.c @@ -34,7 +34,6 @@ typedef struct gfx_ctx_wayland_data int g_fd; unsigned g_width; unsigned g_height; - unsigned g_interval; struct wl_display *g_dpy; struct wl_registry *g_registry; struct wl_compositor *g_compositor; @@ -177,30 +176,6 @@ static void gfx_ctx_wl_destroy_resources(gfx_ctx_wayland_data_t *wl) wl->g_height = 0; } -static void gfx_ctx_wl_swap_interval(void *data, unsigned interval) -{ - driver_t *driver = driver_get_ptr(); - gfx_ctx_wayland_data_t *wl = (gfx_ctx_wayland_data_t*) - driver->video_context_data; - - (void)data; - - if (!wl) - return; - - wl->g_interval = interval; - - if (g_egl_dpy && eglGetCurrentContext()) - { - RARCH_LOG("[Wayland/EGL]: eglSwapInterval(%u)\n", wl->g_interval); - if (!eglSwapInterval(g_egl_dpy, wl->g_interval)) - { - RARCH_ERR("[Wayland/EGL]: eglSwapInterval() failed.\n"); - egl_report_error(); - } - } -} - static void flush_wayland_fd(void) { struct pollfd fd = {0}; @@ -579,7 +554,7 @@ static bool gfx_ctx_wl_set_video_mode(void *data, RARCH_LOG("[Wayland/EGL]: Current context: %p.\n", (void*)eglGetCurrentContext()); - gfx_ctx_wl_swap_interval(data, wl->g_interval); + egl_set_swap_interval(data, g_interval); if (fullscreen) wl_shell_surface_set_fullscreen(wl->g_shell_surf, WL_SHELL_SURFACE_FULLSCREEN_METHOD_DEFAULT, 0, NULL); @@ -804,7 +779,7 @@ const gfx_ctx_driver_t gfx_ctx_wayland = { gfx_ctx_wl_init, gfx_ctx_wl_destroy, gfx_ctx_wl_bind_api, - gfx_ctx_wl_swap_interval, + egl_set_swap_interval, gfx_ctx_wl_set_video_mode, gfx_ctx_wl_get_video_size, NULL, /* get_video_output_size */ diff --git a/gfx/drivers_context/xegl_ctx.c b/gfx/drivers_context/xegl_ctx.c index 29202c804b..7855fd22bd 100644 --- a/gfx/drivers_context/xegl_ctx.c +++ b/gfx/drivers_context/xegl_ctx.c @@ -34,7 +34,6 @@ static XF86VidModeModeInfo g_desktop_mode; static bool g_should_reset_mode; static bool g_inited; -static unsigned g_interval; static enum gfx_ctx_api g_api; static unsigned g_major; static unsigned g_minor; @@ -48,24 +47,6 @@ static int egl_nul_handler(Display *dpy, XErrorEvent *event) static void gfx_ctx_xegl_destroy(void *data); -static void gfx_ctx_xegl_swap_interval(void *data, unsigned interval) -{ - (void)data; - g_interval = interval; - - if (!g_egl_dpy) - return; - if (!(eglGetCurrentContext())) - return; - - RARCH_LOG("[X/EGL]: eglSwapInterval(%u)\n", g_interval); - if (!eglSwapInterval(g_egl_dpy, g_interval)) - { - RARCH_ERR("[X/EGL]: eglSwapInterval() failed.\n"); - egl_report_error(); - } -} - static void gfx_ctx_xegl_set_resize(void *data, unsigned width, unsigned height) { @@ -396,7 +377,7 @@ static bool gfx_ctx_xegl_set_video_mode(void *data, x11_event_queue_check(&event); x11_install_quit_atom(); - gfx_ctx_xegl_swap_interval(data, g_interval); + egl_set_swap_interval(data, g_interval); /* This can blow up on some drivers. It's not fatal, * so override errors for this call. @@ -550,7 +531,7 @@ const gfx_ctx_driver_t gfx_ctx_x_egl = gfx_ctx_xegl_init, gfx_ctx_xegl_destroy, gfx_ctx_xegl_bind_api, - gfx_ctx_xegl_swap_interval, + egl_set_swap_interval, gfx_ctx_xegl_set_video_mode, x11_get_video_size, NULL, /* get_video_output_size */