Divorce video poke interface from driver_t struct

This commit is contained in:
twinaphex 2015-11-23 22:14:39 +01:00
parent 09fe26257c
commit 06035875f2
4 changed files with 43 additions and 66 deletions

View File

@ -281,9 +281,6 @@ typedef struct driver
* TODO: Refactor this better. */ * TODO: Refactor this better. */
bool gfx_use_rgba; bool gfx_use_rgba;
/* Interface for "poking". */
const video_poke_interface_t *video_poke;
/* Last message given to the video driver */ /* Last message given to the video driver */
char current_msg[PATH_MAX_LENGTH]; char current_msg[PATH_MAX_LENGTH];
} driver_t; } driver_t;

View File

@ -72,6 +72,9 @@ typedef struct video_driver_state
static void *video_data; static void *video_data;
static const video_driver_t *current_video; static const video_driver_t *current_video;
/* Interface for "poking". */
static const video_poke_interface_t *video_poke;
static struct retro_system_av_info video_viewport_av_info; static struct retro_system_av_info video_viewport_av_info;
static video_driver_state_t video_state; static video_driver_state_t video_state;
@ -281,13 +284,16 @@ void *video_driver_get_ptr(bool force_nonthreaded_data)
return video_data; return video_data;
} }
#define video_driver_get_poke_ptr(driver) (driver) ? driver->video_poke : NULL
const char *video_driver_get_ident(void) const char *video_driver_get_ident(void)
{ {
return (current_video) ? current_video->ident : NULL; return (current_video) ? current_video->ident : NULL;
} }
const video_poke_interface_t *video_driver_get_poke(void)
{
return video_poke;
}
/** /**
* video_driver_get_current_framebuffer: * video_driver_get_current_framebuffer:
* *
@ -298,11 +304,8 @@ const char *video_driver_get_ident(void)
**/ **/
uintptr_t video_driver_get_current_framebuffer(void) uintptr_t video_driver_get_current_framebuffer(void)
{ {
driver_t *driver = driver_get_ptr(); if (video_poke && video_poke->get_current_framebuffer)
const video_poke_interface_t *poke = video_driver_get_poke_ptr(driver); return video_poke->get_current_framebuffer(video_data);
if (poke && poke->get_current_framebuffer)
return poke->get_current_framebuffer(video_data);
return 0; return 0;
} }
@ -310,11 +313,8 @@ static uint64_t video_frame_count;
retro_proc_address_t video_driver_get_proc_address(const char *sym) retro_proc_address_t video_driver_get_proc_address(const char *sym)
{ {
driver_t *driver = driver_get_ptr(); if (video_poke && video_poke->get_proc_address)
const video_poke_interface_t *poke = video_driver_get_poke_ptr(driver); return video_poke->get_proc_address(video_data, sym);
if (poke && poke->get_proc_address)
return poke->get_proc_address(video_data, sym);
return NULL; return NULL;
} }
@ -722,9 +722,9 @@ static bool init_video(void)
goto error; goto error;
} }
driver->video_poke = NULL; video_poke = NULL;
if (current_video->poke_interface) if (current_video->poke_interface)
current_video->poke_interface(video_data, &driver->video_poke); current_video->poke_interface(video_data, &video_poke);
if (current_video->viewport_info && (!custom_vp->width || if (current_video->viewport_info && (!custom_vp->width ||
!custom_vp->height)) !custom_vp->height))
@ -791,12 +791,9 @@ bool video_driver_set_rotation(unsigned rotation)
bool video_driver_set_video_mode(unsigned width, bool video_driver_set_video_mode(unsigned width,
unsigned height, bool fullscreen) unsigned height, bool fullscreen)
{ {
driver_t *driver = driver_get_ptr(); if (video_poke && video_poke->set_video_mode)
const video_poke_interface_t *poke = video_driver_get_poke_ptr(driver);
if (poke && poke->set_video_mode)
{ {
poke->set_video_mode(video_data, width, height, fullscreen); video_poke->set_video_mode(video_data, width, height, fullscreen);
return true; return true;
} }
@ -805,12 +802,9 @@ bool video_driver_set_video_mode(unsigned width,
bool video_driver_get_video_output_size(unsigned *width, unsigned *height) bool video_driver_get_video_output_size(unsigned *width, unsigned *height)
{ {
driver_t *driver = driver_get_ptr(); if (video_poke && video_poke->get_video_output_size)
const video_poke_interface_t *poke = video_driver_get_poke_ptr(driver);
if (poke && poke->get_video_output_size)
{ {
poke->get_video_output_size(video_data, width, height); video_poke->get_video_output_size(video_data, width, height);
return true; return true;
} }
return false; return false;
@ -821,21 +815,15 @@ bool video_driver_get_video_output_size(unsigned *width, unsigned *height)
void video_driver_set_osd_msg(const char *msg, void video_driver_set_osd_msg(const char *msg,
const struct font_params *params, void *font) const struct font_params *params, void *font)
{ {
driver_t *driver = driver_get_ptr(); if (video_poke && video_poke->set_osd_msg)
const video_poke_interface_t *poke = video_driver_get_poke_ptr(driver); video_poke->set_osd_msg(video_data, msg, params, font);
if (poke && poke->set_osd_msg)
poke->set_osd_msg(video_data, msg, params, font);
} }
void video_driver_set_texture_enable(bool enable, bool fullscreen) void video_driver_set_texture_enable(bool enable, bool fullscreen)
{ {
#ifdef HAVE_MENU #ifdef HAVE_MENU
driver_t *driver = driver_get_ptr(); if (video_poke && video_poke->set_texture_enable)
const video_poke_interface_t *poke = video_driver_get_poke_ptr(driver); video_poke->set_texture_enable(video_data, enable, fullscreen);
if (poke && poke->set_texture_enable)
poke->set_texture_enable(video_data, enable, fullscreen);
#endif #endif
} }
@ -843,11 +831,8 @@ void video_driver_set_texture_frame(const void *frame, bool rgb32,
unsigned width, unsigned height, float alpha) unsigned width, unsigned height, float alpha)
{ {
#ifdef HAVE_MENU #ifdef HAVE_MENU
driver_t *driver = driver_get_ptr(); if (video_poke && video_poke->set_texture_frame)
const video_poke_interface_t *poke = video_driver_get_poke_ptr(driver); video_poke->set_texture_frame(video_data, frame, rgb32, width, height, alpha);
if (poke && poke->set_texture_frame)
poke->set_texture_frame(video_data, frame, rgb32, width, height, alpha);
#endif #endif
} }
@ -885,11 +870,8 @@ void *video_driver_read_frame_raw(unsigned *width,
void video_driver_set_filtering(unsigned index, bool smooth) void video_driver_set_filtering(unsigned index, bool smooth)
{ {
driver_t *driver = driver_get_ptr(); if (video_poke && video_poke->set_filtering)
const video_poke_interface_t *poke = video_driver_get_poke_ptr(driver); video_poke->set_filtering(video_data, index, smooth);
if (poke && poke->set_filtering)
poke->set_filtering(video_data, index, smooth);
} }
void video_driver_cached_frame_set_ptr(const void *data) void video_driver_cached_frame_set_ptr(const void *data)
@ -1403,8 +1385,6 @@ static bool video_viewport_set_config(void)
bool video_driver_ctl(enum rarch_display_ctl_state state, void *data) bool video_driver_ctl(enum rarch_display_ctl_state state, void *data)
{ {
driver_t *driver = driver_get_ptr();
const video_poke_interface_t *poke = video_driver_get_poke_ptr(driver);
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
const struct retro_hw_render_callback *hw_render = const struct retro_hw_render_callback *hw_render =
(const struct retro_hw_render_callback*)video_driver_callback(); (const struct retro_hw_render_callback*)video_driver_callback();
@ -1463,16 +1443,16 @@ bool video_driver_ctl(enum rarch_display_ctl_state state, void *data)
} }
return true; return true;
case RARCH_DISPLAY_CTL_GET_NEXT_VIDEO_OUT: case RARCH_DISPLAY_CTL_GET_NEXT_VIDEO_OUT:
if (poke && poke->get_video_output_next) if (video_poke && video_poke->get_video_output_next)
{ {
poke->get_video_output_next(video_data); video_poke->get_video_output_next(video_data);
return true; return true;
} }
return gfx_ctx_get_video_output_next(gfx_ctx_data_get_ptr()); return gfx_ctx_get_video_output_next(gfx_ctx_data_get_ptr());
case RARCH_DISPLAY_CTL_GET_PREV_VIDEO_OUT: case RARCH_DISPLAY_CTL_GET_PREV_VIDEO_OUT:
if (poke && poke->get_video_output_prev) if (video_poke && video_poke->get_video_output_prev)
{ {
poke->get_video_output_prev(video_data); video_poke->get_video_output_prev(video_data);
return true; return true;
} }
return gfx_ctx_get_video_output_next(gfx_ctx_data_get_ptr()); return gfx_ctx_get_video_output_next(gfx_ctx_data_get_ptr());
@ -1487,16 +1467,16 @@ bool video_driver_ctl(enum rarch_display_ctl_state state, void *data)
video_monitor_adjust_system_rates(); video_monitor_adjust_system_rates();
return true; return true;
case RARCH_DISPLAY_CTL_SET_ASPECT_RATIO: case RARCH_DISPLAY_CTL_SET_ASPECT_RATIO:
if (!poke || !poke->set_aspect_ratio) if (!video_poke || !video_poke->set_aspect_ratio)
return false; return false;
poke->set_aspect_ratio(video_data, settings->video.aspect_ratio_idx); video_poke->set_aspect_ratio(video_data, settings->video.aspect_ratio_idx);
return true; return true;
case RARCH_DISPLAY_CTL_SHOW_MOUSE: case RARCH_DISPLAY_CTL_SHOW_MOUSE:
{ {
bool *toggle = (bool*)data; bool *toggle = (bool*)data;
if (poke && poke->show_mouse) if (video_poke && video_poke->show_mouse)
poke->show_mouse(video_data, *toggle); video_poke->show_mouse(video_data, *toggle);
} }
return true; return true;
case RARCH_DISPLAY_CTL_SET_NONBLOCK_STATE: case RARCH_DISPLAY_CTL_SET_NONBLOCK_STATE:
@ -1513,8 +1493,8 @@ bool video_driver_ctl(enum rarch_display_ctl_state state, void *data)
case RARCH_DISPLAY_CTL_FIND_DRIVER: case RARCH_DISPLAY_CTL_FIND_DRIVER:
return find_video_driver(); return find_video_driver();
case RARCH_DISPLAY_CTL_APPLY_STATE_CHANGES: case RARCH_DISPLAY_CTL_APPLY_STATE_CHANGES:
if (poke && poke->apply_state_changes) if (video_poke && video_poke->apply_state_changes)
poke->apply_state_changes(video_data); video_poke->apply_state_changes(video_data);
return true; return true;
case RARCH_DISPLAY_CTL_READ_VIEWPORT: case RARCH_DISPLAY_CTL_READ_VIEWPORT:
if (current_video && current_video->read_viewport) if (current_video && current_video->read_viewport)

View File

@ -520,6 +520,8 @@ bool video_pixel_frame_scale(const void *data,
video_pixel_scaler_t *scaler_get_ptr(void); video_pixel_scaler_t *scaler_get_ptr(void);
const video_poke_interface_t *video_driver_get_poke(void);
extern video_driver_t video_gl; extern video_driver_t video_gl;
extern video_driver_t video_psp1; extern video_driver_t video_psp1;
extern video_driver_t video_vita2d; extern video_driver_t video_vita2d;

View File

@ -72,15 +72,13 @@ const shader_backend_t *shader_ctx_init_first(void)
struct video_shader *video_shader_driver_get_current_shader(void) struct video_shader *video_shader_driver_get_current_shader(void)
{ {
driver_t *driver = driver_get_ptr(); void *video_driver = video_driver_get_ptr(true);
void *video_driver = video_driver_get_ptr(true); const video_poke_interface_t *video_poke = video_driver_get_poke();
if (!driver->video_poke) if (!video_poke || !video_driver)
return NULL; return NULL;
if (!video_driver) if (!video_poke->get_current_shader)
return NULL; return NULL;
if (!driver->video_poke->get_current_shader) return video_poke->get_current_shader(video_driver);
return NULL;
return driver->video_poke->get_current_shader(video_driver);
} }
void video_shader_scale(unsigned idx, void video_shader_scale(unsigned idx,