From 2b1481d97fb1bcfb7944e69f46f8d0480922619d Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 15 Nov 2017 14:09:41 +0100 Subject: [PATCH] Refactor set_mvp code a bit --- gfx/drivers_shader/shader_gl_cg.c | 14 +++++++++----- gfx/drivers_shader/shader_glsl.c | 6 ++++-- gfx/drivers_shader/shader_hlsl.c | 3 ++- gfx/video_driver.c | 7 ++++--- gfx/video_driver.h | 4 ++-- 5 files changed, 21 insertions(+), 13 deletions(-) diff --git a/gfx/drivers_shader/shader_gl_cg.c b/gfx/drivers_shader/shader_gl_cg.c index 218f51ca59..e37b40352c 100644 --- a/gfx/drivers_shader/shader_gl_cg.c +++ b/gfx/drivers_shader/shader_gl_cg.c @@ -253,14 +253,18 @@ static void gl_cg_reset_attrib(void *data) cg->attribs_index = 0; } -static bool gl_cg_set_mvp(void *data, void *shader_data, const math_matrix_4x4 *mat) +static bool gl_cg_set_mvp(void *data, void *shader_data, + const void *mat_data) { cg_shader_data_t *cg = (cg_shader_data_t*)shader_data; - if (!cg || !cg->prg[cg->active_idx].mvp) - return false; + if (cg && cg->prg[cg->active_idx].mvp) + { + const math_matrix_4x4 *mat = (const math_matrix_4x4*)mat_data; + cgGLSetMatrixParameterfc(cg->prg[cg->active_idx].mvp, mat->data); + return true; + } - cgGLSetMatrixParameterfc(cg->prg[cg->active_idx].mvp, mat->data); - return true; + return false; } static bool gl_cg_set_coords(void *handle_data, void *shader_data, const struct video_coords *coords) diff --git a/gfx/drivers_shader/shader_glsl.c b/gfx/drivers_shader/shader_glsl.c index 6858ee72f9..f2e0d9feb7 100644 --- a/gfx/drivers_shader/shader_glsl.c +++ b/gfx/drivers_shader/shader_glsl.c @@ -1434,10 +1434,10 @@ static void gl_glsl_set_params(void *data, void *shader_data, } } -static bool gl_glsl_set_mvp(void *data, void *shader_data, const math_matrix_4x4 *mat) +static bool gl_glsl_set_mvp(void *data, void *shader_data, const void *mat_data) { int loc; - glsl_shader_data_t *glsl = (glsl_shader_data_t*)shader_data; + glsl_shader_data_t *glsl = (glsl_shader_data_t*)shader_data; (void)data; @@ -1447,6 +1447,8 @@ static bool gl_glsl_set_mvp(void *data, void *shader_data, const math_matrix_4x4 loc = glsl->uniforms[glsl->active_idx].mvp; if (loc >= 0) { + const math_matrix_4x4 *mat = (const math_matrix_4x4*)mat_data; + if ( (glsl->current_idx != glsl->active_idx) || (mat->data != glsl->current_mat_data_pointer[glsl->active_idx]) || (*mat->data != glsl->current_mat_data[glsl->active_idx])) diff --git a/gfx/drivers_shader/shader_hlsl.c b/gfx/drivers_shader/shader_hlsl.c index 2d5507f750..9ffedf5ef1 100644 --- a/gfx/drivers_shader/shader_hlsl.c +++ b/gfx/drivers_shader/shader_hlsl.c @@ -497,11 +497,12 @@ static void hlsl_shader_scale(void *data, unsigned idx, struct gfx_fbo_scale *sc scale->valid = false; } -static bool hlsl_set_mvp(void *data, void *shader_data, const math_matrix_4x4 *mat) +static bool hlsl_set_mvp(void *data, void *shader_data, const void *mat_data) { d3d_video_t *d3d = (d3d_video_t*)data; LPDIRECT3DDEVICE d3dr = (LPDIRECT3DDEVICE)d3d->dev; hlsl_shader_data_t *hlsl_data = (hlsl_shader_data_t*)shader_data; + const math_matrix_4x4 *mat = (const math_matrix_4x4*)mat_data; if(hlsl_data && hlsl_data->prg[hlsl_data->active_idx].mvp) { diff --git a/gfx/video_driver.c b/gfx/video_driver.c index 2aa2a49376..6a4fa06312 100644 --- a/gfx/video_driver.c +++ b/gfx/video_driver.c @@ -127,7 +127,7 @@ typedef struct video_pixel_scaler static void (*video_driver_cb_shader_use)(void *data, void *shader_data, unsigned index, bool set_active); static bool (*video_driver_cb_shader_set_mvp)(void *data, - void *shader_data, const math_matrix_4x4 *mat); + void *shader_data, const void *mat_data); bool (*video_driver_cb_has_focus)(void); /* Opaque handles to currently running window. @@ -3237,7 +3237,7 @@ static enum gfx_wrap_type video_shader_driver_wrap_type_null( } static bool video_shader_driver_set_mvp_null(void *data, - void *shader_data, const math_matrix_4x4 *mat) + void *shader_data, const void *mat_data) { return false; } @@ -3245,9 +3245,10 @@ static bool video_shader_driver_set_mvp_null(void *data, #ifdef HAVE_OPENGL #ifndef NO_GL_FF_MATRIX static bool video_shader_driver_set_mvp_null_gl(void *data, - void *shader_data, const math_matrix_4x4 *mat) + void *shader_data, const void *mat_data) { math_matrix_4x4 ident; + const math_matrix_4x4 *mat = (const math_matrix_4x4*)mat_data; /* Fall back to fixed function-style if needed and possible. */ glMatrixMode(GL_PROJECTION); diff --git a/gfx/video_driver.h b/gfx/video_driver.h index acb80d5b47..ee0dd84d99 100644 --- a/gfx/video_driver.h +++ b/gfx/video_driver.h @@ -234,7 +234,7 @@ typedef struct shader_backend bool (*set_coords)(void *handle_data, void *shader_data, const struct video_coords *coords); bool (*set_mvp)(void *data, void *shader_data, - const math_matrix_4x4 *mat); + const void *mat_data); unsigned (*get_prev_textures)(void *data); bool (*get_feedback_pass)(void *data, unsigned *pass); bool (*mipmap_input)(void *data, unsigned index); @@ -471,7 +471,7 @@ typedef struct video_frame_info void *shader_data, const struct video_coords *coords); #endif bool (*cb_shader_set_mvp)(void *data, void *shader_data, - const math_matrix_4x4 *mat); + const void *mat_data); void *context_data; void *shader_data;