Do away with all these if conditionals

This commit is contained in:
twinaphex 2017-05-18 14:06:50 +02:00
parent d7ed925488
commit 1411b9ee6e
3 changed files with 81 additions and 70 deletions

View File

@ -27,10 +27,6 @@
#include "../../config.h"
#endif
#ifdef HAVE_OPENGL
#include "../common/gl_common.h"
#endif
#include "../video_shader_driver.h"
typedef struct null_shader_data
@ -58,18 +54,6 @@ static void *shader_null_init(void *data, const char *path)
return null_shader;
}
static void shader_null_set_params(void *data, void *shader_data,
unsigned width, unsigned height,
unsigned tex_width, unsigned tex_height,
unsigned out_width, unsigned out_height,
unsigned frame_count,
const void *info,
const void *prev_info,
const void *feedback_info,
const void *fbo_info, unsigned fbo_info_cnt)
{
}
static void shader_null_set_uniform_parameter(
void *data,
struct uniform_info *param,
@ -77,35 +61,6 @@ static void shader_null_set_uniform_parameter(
{
}
static bool shader_null_set_mvp(void *data, void *shader_data, const math_matrix_4x4 *mat)
{
#ifdef HAVE_OPENGL
#ifndef NO_GL_FF_MATRIX
if (string_is_equal_fast(video_driver_get_ident(), "gl", 2))
gl_ff_matrix(mat);
#endif
#endif
return false;
}
static bool shader_null_set_coords(void *handle_data, void *shader_data, const struct video_coords *coords)
{
#ifdef HAVE_OPENGL
#ifndef NO_GL_FF_VERTEX
if (string_is_equal_fast(video_driver_get_ident(), "gl", 2))
gl_ff_vertex(coords);
#endif
#endif
return false;
}
static void shader_null_use(void *data, void *shader_data, unsigned idx, bool set_active)
{
(void)data;
(void)idx;
(void)set_active;
}
static unsigned shader_null_num(void *data)
{
return 0;
@ -118,12 +73,6 @@ static bool shader_null_filter_type(void *data, unsigned idx, bool *smooth)
return false;
}
static enum gfx_wrap_type shader_null_wrap_type(void *data, unsigned idx)
{
(void)idx;
return RARCH_WRAP_BORDER;
}
static void shader_null_shader_scale(void *data,
unsigned idx, struct gfx_fbo_scale *scale)
{
@ -165,17 +114,17 @@ static bool shader_null_compile_program(
const shader_backend_t shader_null_backend = {
shader_null_init,
shader_null_deinit,
shader_null_set_params,
NULL,
shader_null_set_uniform_parameter,
shader_null_compile_program,
shader_null_use,
NULL,
shader_null_num,
shader_null_filter_type,
shader_null_wrap_type,
shader_null_shader_scale,
shader_null_set_coords,
NULL,
shader_null_set_mvp,
shader_null_shader_scale,
NULL,
NULL,
NULL,
shader_null_get_prev_textures,
shader_null_get_feedback_pass,
shader_null_mipmap_input,

View File

@ -16,11 +16,16 @@
#include <string.h>
#include <string/stdstring.h>
#include <gfx/math/matrix_4x4.h>
#ifdef HAVE_CONFIG_H
#include "../config.h"
#endif
#ifdef HAVE_OPENGL
#include "common/gl_common.h"
#endif
#include "video_shader_driver.h"
#include "../verbosity.h"
@ -38,7 +43,7 @@ static const shader_backend_t *shader_ctx_drivers[] = {
NULL
};
const shader_backend_t *current_shader = NULL;
shader_backend_t *current_shader = NULL;
void *shader_data = NULL;
static const shader_backend_t *video_shader_set_backend(enum rarch_shader_type type)
@ -135,10 +140,71 @@ bool video_shader_driver_deinit(void)
return true;
}
static enum gfx_wrap_type video_shader_driver_wrap_type_null(void *data, unsigned index)
{
return RARCH_WRAP_BORDER;
}
static bool video_shader_driver_set_mvp_null(void *data, void *shader_data, const math_matrix_4x4 *mat)
{
#ifdef HAVE_OPENGL
#ifndef NO_GL_FF_MATRIX
if (string_is_equal_fast(video_driver_get_ident(), "gl", 2))
gl_ff_matrix(mat);
#endif
#endif
return false;
}
static bool video_shader_driver_set_coords_null(void *handle_data, void *shader_data, const struct video_coords *coords)
{
#ifdef HAVE_OPENGL
#ifndef NO_GL_FF_VERTEX
if (string_is_equal_fast(video_driver_get_ident(), "gl", 2))
gl_ff_vertex(coords);
#endif
#endif
return false;
}
static void video_shader_driver_use_null(void *data, void *shader_data, unsigned idx, bool set_active)
{
(void)data;
(void)idx;
(void)set_active;
}
static void video_shader_driver_set_params_null(void *data, void *shader_data,
unsigned width, unsigned height,
unsigned tex_width, unsigned tex_height,
unsigned out_width, unsigned out_height,
unsigned frame_count,
const void *info,
const void *prev_info,
const void *feedback_info,
const void *fbo_info, unsigned fbo_info_cnt)
{
}
static void video_shader_driver_reset_to_defaults(void)
{
if (!current_shader->wrap_type)
current_shader->wrap_type = video_shader_driver_wrap_type_null;
if (!current_shader->set_mvp)
current_shader->set_mvp = video_shader_driver_set_mvp_null;
if (!current_shader->set_coords)
current_shader->set_coords = video_shader_driver_set_coords_null;
if (!current_shader->use)
current_shader->use = video_shader_driver_use_null;
if (!current_shader->set_params)
current_shader->set_params = video_shader_driver_set_params_null;
}
/* Finds first suitable shader context driver. */
bool video_shader_driver_init_first(void)
{
current_shader = shader_ctx_drivers[0];
current_shader = (shader_backend_t*)shader_ctx_drivers[0];
video_shader_driver_reset_to_defaults();
return true;
}
@ -160,7 +226,8 @@ bool video_shader_driver_init(video_shader_ctx_init_t *init)
return false;
shader_data = tmp;
current_shader = init->shader;
current_shader = (shader_backend_t*)init->shader;
video_shader_driver_reset_to_defaults();
return true;
}
@ -228,8 +295,6 @@ bool video_shader_driver_compile_program(struct shader_program_info *program_inf
bool video_shader_driver_wrap_type(video_shader_ctx_wrap_t *wrap)
{
if (!current_shader || !current_shader->wrap_type)
return false;
wrap->type = current_shader->wrap_type(shader_data, wrap->idx);
return true;
}

View File

@ -286,8 +286,7 @@ bool video_shader_driver_deinit(void);
current_shader->set_uniform_parameter(shader_data, &param, NULL)
#define video_shader_driver_set_parameters(params) \
if (current_shader && current_shader->set_params) \
current_shader->set_params(params.data, shader_data, params.width, params.height, params.tex_width, params.tex_height, params.out_width, params.out_height, params.frame_counter, params.info, params.prev_info, params.feedback_info, params.fbo_info, params.fbo_info_cnt)
current_shader->set_params(params.data, shader_data, params.width, params.height, params.tex_width, params.tex_height, params.out_width, params.out_height, params.frame_counter, params.info, params.prev_info, params.feedback_info, params.fbo_info, params.fbo_info_cnt)
bool video_shader_driver_init_first(void);
@ -298,8 +297,7 @@ bool video_shader_driver_get_feedback_pass(unsigned *data);
bool video_shader_driver_mipmap_input(unsigned *index);
#define video_shader_driver_set_coords(coords) \
if (current_shader && current_shader->set_coords) \
if (!current_shader->set_coords(coords.handle_data, shader_data, (const struct video_coords*)coords.data) && current_shader->set_coords_fallback) \
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);
@ -307,7 +305,7 @@ bool video_shader_driver_scale(video_shader_ctx_scale_t *scaler);
bool video_shader_driver_info(video_shader_ctx_info_t *shader_info);
#define video_shader_driver_set_mvp(mvp) \
if (mvp.matrix && current_shader && current_shader->set_mvp) \
if (mvp.matrix) \
current_shader->set_mvp(mvp.data, shader_data, mvp.matrix) \
bool video_shader_driver_filter_type(video_shader_ctx_filter_t *filter);
@ -315,12 +313,11 @@ bool video_shader_driver_filter_type(video_shader_ctx_filter_t *filter);
bool video_shader_driver_compile_program(struct shader_program_info *program_info);
#define video_shader_driver_use(shader_info) \
if (current_shader) \
current_shader->use(shader_info.data, shader_data, shader_info.idx, shader_info.set_active)
current_shader->use(shader_info.data, shader_data, shader_info.idx, shader_info.set_active)
bool video_shader_driver_wrap_type(video_shader_ctx_wrap_t *wrap);
extern const shader_backend_t *current_shader;
extern shader_backend_t *current_shader;
extern void *shader_data;
extern const shader_backend_t gl_glsl_backend;