Create set_coords_fallback for shader driver

This commit is contained in:
twinaphex 2017-03-23 21:49:29 +01:00
parent 571f899c3d
commit 17235d70e2
5 changed files with 29 additions and 10 deletions

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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);