From f94e9c532ea231a89b26d3c35a48b46b7c1df3b0 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 13 Feb 2016 22:02:49 +0100 Subject: [PATCH] Create GFX_CTL_PROC_ADDRESS_GET --- gfx/drivers/gl.c | 8 +++++++- gfx/drivers/vg.c | 8 +++++++- gfx/video_context_driver.c | 13 +++++++++---- gfx/video_context_driver.h | 8 ++------ 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index 3fb207b94d..1b4247b97e 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -3307,7 +3307,13 @@ static uintptr_t gl_get_current_framebuffer(void *data) static retro_proc_address_t gl_get_proc_address(void *data, const char *sym) { - return gfx_ctx_get_proc_address(sym); + gfx_ctx_proc_address_t proc_address; + + proc_address.sym = sym; + + gfx_ctx_ctl(GFX_CTL_PROC_ADDRESS_GET, &proc_address); + + return proc_address.addr; } static void gl_set_aspect_ratio(void *data, unsigned aspect_ratio_idx) diff --git a/gfx/drivers/vg.c b/gfx/drivers/vg.c index 250735b063..02e7892f2f 100644 --- a/gfx/drivers/vg.c +++ b/gfx/drivers/vg.c @@ -177,7 +177,13 @@ static void *vg_init(const video_info_t *video, const input_driver_t **input, vo if (vg_query_extension("KHR_EGL_image") && gfx_ctx_ctl(GFX_CTL_IMAGE_BUFFER_INIT, video)) { - pvgCreateEGLImageTargetKHR = (PFNVGCREATEEGLIMAGETARGETKHRPROC)gfx_ctx_get_proc_address("vgCreateEGLImageTargetKHR"); + gfx_ctx_proc_address_t proc_address; + + proc_address.sym = "vgCreateEGLImageTargetKHR"; + + gfx_ctx_ctl(GFX_CTL_PROC_ADDRESS_GET, &proc_address); + + pvgCreateEGLImageTargetKHR = (PFNVGCREATEEGLIMAGETARGETKHRPROC)proc_address.addr; if (pvgCreateEGLImageTargetKHR) { diff --git a/gfx/video_context_driver.c b/gfx/video_context_driver.c index 9bc414545b..f7d1659359 100644 --- a/gfx/video_context_driver.c +++ b/gfx/video_context_driver.c @@ -132,10 +132,6 @@ bool gfx_ctx_image_buffer_write(const void *frame, unsigned width, rgb32, index, image_handle); } -retro_proc_address_t gfx_ctx_get_proc_address(const char *sym) -{ - return current_video_context->get_proc_address(sym); -} bool gfx_ctx_suppress_screensaver(bool enable) { @@ -434,6 +430,15 @@ bool gfx_ctx_ctl(enum gfx_ctx_ctl_state state, void *data) current_video_context->swap_interval(video_context_data, *interval); } break; + case GFX_CTL_PROC_ADDRESS_GET: + { + gfx_ctx_proc_address_t *proc = (gfx_ctx_proc_address_t*)data; + if (!current_video_context || !current_video_context->get_proc_address) + return false; + + proc->addr = current_video_context->get_proc_address(proc->sym); + } + break; case GFX_CTL_NONE: default: break; diff --git a/gfx/video_context_driver.h b/gfx/video_context_driver.h index 3fbd1f2a33..55f61e10ca 100644 --- a/gfx/video_context_driver.h +++ b/gfx/video_context_driver.h @@ -72,7 +72,8 @@ enum gfx_ctx_ctl_state /* Finds previous driver in graphics context driver array. */ GFX_CTL_FIND_PREV_DRIVER, GFX_CTL_GET_VIDEO_OUTPUT_SIZE, - GFX_CTL_SWAP_INTERVAL + GFX_CTL_SWAP_INTERVAL, + GFX_CTL_PROC_ADDRESS_GET }; typedef void (*gfx_ctx_proc_t)(void); @@ -251,18 +252,15 @@ extern const gfx_ctx_driver_t gfx_ctx_null; **/ const gfx_ctx_driver_t *gfx_ctx_init_first(void *data, const char *ident, enum gfx_ctx_api api, unsigned major, unsigned minor, bool hw_render_ctx); - bool gfx_ctx_get_metrics(enum display_metric_types type, float *value); - void gfx_ctx_translate_aspect(float *aspect, unsigned width, unsigned height); bool gfx_ctx_set_video_mode(unsigned width, unsigned height, bool fullscreen); - bool gfx_ctx_image_buffer_write(const void *frame, unsigned width, unsigned height, unsigned pitch, bool rgb32, unsigned index, void **image_handle); @@ -278,8 +276,6 @@ const char *gfx_ctx_get_ident(void); void gfx_ctx_input_driver( const input_driver_t **input, void **input_data); -retro_proc_address_t gfx_ctx_get_proc_address(const char *sym); - bool gfx_ctx_ctl(enum gfx_ctx_ctl_state state, void *data); #ifdef __cplusplus