From 17235d70e297e043b004f3476e8e2d4d1e3b8791 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Thu, 23 Mar 2017 21:49:29 +0100 Subject: [PATCH] Create set_coords_fallback for shader driver --- gfx/drivers_shader/shader_gl_cg.c | 13 ++++++++++--- gfx/drivers_shader/shader_glsl.c | 19 +++++++++++++------ gfx/drivers_shader/shader_hlsl.c | 1 + gfx/drivers_shader/shader_null.c | 1 + gfx/video_shader_driver.h | 5 ++++- 5 files changed, 29 insertions(+), 10 deletions(-) diff --git a/gfx/drivers_shader/shader_gl_cg.c b/gfx/drivers_shader/shader_gl_cg.c index 349b77936c..418e5153bb 100644 --- a/gfx/drivers_shader/shader_gl_cg.c +++ b/gfx/drivers_shader/shader_gl_cg.c @@ -276,7 +276,11 @@ static bool gl_cg_set_coords(void *handle_data, void *shader_data, const struct cg_shader_data_t *cg = (cg_shader_data_t*)shader_data; if (!cg || !coords) - goto fallback; + { + if (coords) + return false; + return true; + } if (cg->prg[cg->active_idx].vertex) gl_cg_set_coord_array(cg->prg[cg->active_idx].vertex, cg, coords->vertex, 2); @@ -291,10 +295,12 @@ static bool gl_cg_set_coords(void *handle_data, void *shader_data, const struct gl_cg_set_coord_array(cg->prg[cg->active_idx].color, cg, coords->color, 4); return true; +} -fallback: +static bool gl_cg_set_coords_fallback(void *handle_data, void *shader_data, const struct video_coords *coords) +{ gl_ff_vertex(coords); - return false; + return true; } static void gl_cg_set_texture_info( @@ -1228,6 +1234,7 @@ const shader_backend_t gl_cg_backend = { gl_cg_wrap_type, gl_cg_shader_scale, gl_cg_set_coords, + gl_cg_set_coords_fallback, gl_cg_set_mvp, gl_cg_get_prev_textures, gl_cg_get_feedback_pass, diff --git a/gfx/drivers_shader/shader_glsl.c b/gfx/drivers_shader/shader_glsl.c index 72adc5009f..8fb6d80d3c 100644 --- a/gfx/drivers_shader/shader_glsl.c +++ b/gfx/drivers_shader/shader_glsl.c @@ -1405,7 +1405,11 @@ static bool gl_glsl_set_coords(void *handle_data, void *shader_data, ? &glsl->uniforms[glsl->active_idx] : NULL; if (!glsl || !glsl->shader->modern || !coords) - goto fallback; + { + if (coords) + return false; + return true; + } if (coords->vertices > 4) { @@ -1423,7 +1427,7 @@ static bool gl_glsl_set_coords(void *handle_data, void *shader_data, } if (!buffer) - goto fallback; + return false; if (uni->tex_coord >= 0) { @@ -1465,11 +1469,13 @@ static bool gl_glsl_set_coords(void *handle_data, void *shader_data, free(buffer); return true; +} -fallback: - if (coords) - gl_ff_vertex(coords); - return false; +static bool gl_glsl_set_coords_fallback(void *handle_data, void *shader_data, + const struct video_coords *coords) +{ + gl_ff_vertex(coords); + return true; } static void gl_glsl_use(void *data, void *shader_data, unsigned idx, bool set_active) @@ -1598,6 +1604,7 @@ const shader_backend_t gl_glsl_backend = { gl_glsl_wrap_type, gl_glsl_shader_scale, gl_glsl_set_coords, + gl_glsl_set_coords_fallback, gl_glsl_set_mvp, gl_glsl_get_prev_textures, gl_glsl_get_feedback_pass, diff --git a/gfx/drivers_shader/shader_hlsl.c b/gfx/drivers_shader/shader_hlsl.c index 4bd0549ab9..2a19480dca 100644 --- a/gfx/drivers_shader/shader_hlsl.c +++ b/gfx/drivers_shader/shader_hlsl.c @@ -539,6 +539,7 @@ const shader_backend_t hlsl_backend = { NULL, /* hlsl_wrap_type */ hlsl_shader_scale, NULL, /* hlsl_set_coords */ + NULL, /* hlsl_set_coords_fallback */ hlsl_set_mvp, NULL, /* hlsl_get_prev_textures */ hlsl_get_feedback_pass, diff --git a/gfx/drivers_shader/shader_null.c b/gfx/drivers_shader/shader_null.c index 7b1a123126..ea40f7dc75 100644 --- a/gfx/drivers_shader/shader_null.c +++ b/gfx/drivers_shader/shader_null.c @@ -174,6 +174,7 @@ const shader_backend_t shader_null_backend = { shader_null_wrap_type, shader_null_shader_scale, shader_null_set_coords, + NULL, shader_null_set_mvp, shader_null_get_prev_textures, shader_null_get_feedback_pass, diff --git a/gfx/video_shader_driver.h b/gfx/video_shader_driver.h index 91060b6f06..fe5996c406 100644 --- a/gfx/video_shader_driver.h +++ b/gfx/video_shader_driver.h @@ -173,6 +173,8 @@ typedef struct shader_backend unsigned index, struct gfx_fbo_scale *scale); bool (*set_coords)(void *handle_data, void *shader_data, const struct video_coords *coords); + bool (*set_coords_fallback)(void *handle_data, + void *shader_data, const struct video_coords *coords); bool (*set_mvp)(void *data, void *shader_data, const math_matrix_4x4 *mat); unsigned (*get_prev_textures)(void *data); @@ -297,7 +299,8 @@ bool video_shader_driver_mipmap_input(unsigned *index); #define video_shader_driver_set_coords(coords) \ if (current_shader && current_shader->set_coords) \ - current_shader->set_coords(coords.handle_data, shader_data, (const struct video_coords*)coords.data) + if (!current_shader->set_coords(coords.handle_data, shader_data, (const struct video_coords*)coords.data) && current_shader->set_coords_fallback) \ + current_shader->set_coords_fallback(coords.handle_data, shader_data, (const struct video_coords*)coords.data) bool video_shader_driver_scale(video_shader_ctx_scale_t *scaler);