1
0
mirror of https://github.com/libretro/RetroArch synced 2025-03-26 02:37:23 +00:00

Pass data param to more shader functions

This commit is contained in:
twinaphex 2014-03-07 05:51:56 +01:00
parent ab79407dc6
commit 39c1ec4672
7 changed files with 49 additions and 42 deletions

@ -259,7 +259,7 @@ static void setup_font(void *data, const char *msg, GLfloat scale, GLfloat pos_x
return;
if (gl->shader)
gl->shader->use(GL_SHADER_STOCK_BLEND);
gl->shader->use(gl, GL_SHADER_STOCK_BLEND);
gl_set_viewport(gl, gl->win_width, gl->win_height, false, false);

@ -330,7 +330,7 @@ void gl_shader_set_coords(void *data, const struct gl_coords *coords, const math
if (gl->shader)
ret_coords = gl->shader->set_coords(coords);
if (gl->shader)
ret_mvp = gl->shader->set_mvp(mat);
ret_mvp = gl->shader->set_mvp(gl, mat);
// Fall back to FF-style if needed and possible.
#ifndef NO_GL_FF_VERTEX
@ -932,7 +932,7 @@ static void gl_frame_fbo(void *data, const struct gl_tex_info *tex_info)
glBindFramebuffer(GL_FRAMEBUFFER, gl->fbo[i]);
if (gl->shader)
gl->shader->use(i + 1);
gl->shader->use(gl, i + 1);
glBindTexture(GL_TEXTURE_2D, gl->fbo_texture[i - 1]);
glClear(GL_COLOR_BUFFER_BIT);
@ -940,7 +940,7 @@ static void gl_frame_fbo(void *data, const struct gl_tex_info *tex_info)
// Render to FBO with certain size.
gl_set_viewport(gl, rect->img_width, rect->img_height, true, false);
if (gl->shader)
gl->shader->set_params(prev_rect->img_width, prev_rect->img_height,
gl->shader->set_params(gl, prev_rect->img_width, prev_rect->img_height,
prev_rect->width, prev_rect->height,
gl->vp.width, gl->vp.height, g_extern.frame_count,
tex_info, gl->prev_info, fbo_tex_info, fbo_tex_info_cnt);
@ -961,7 +961,7 @@ static void gl_frame_fbo(void *data, const struct gl_tex_info *tex_info)
// Render our FBO texture to back buffer.
gl_bind_backbuffer();
if (gl->shader)
gl->shader->use(gl->fbo_pass + 1);
gl->shader->use(gl, gl->fbo_pass + 1);
glBindTexture(GL_TEXTURE_2D, gl->fbo_texture[gl->fbo_pass - 1]);
@ -969,7 +969,7 @@ static void gl_frame_fbo(void *data, const struct gl_tex_info *tex_info)
gl_set_viewport(gl, gl->win_width, gl->win_height, false, true);
if (gl->shader)
gl->shader->set_params(prev_rect->img_width, prev_rect->img_height,
gl->shader->set_params(gl, prev_rect->img_width, prev_rect->img_height,
prev_rect->width, prev_rect->height,
gl->vp.width, gl->vp.height, g_extern.frame_count,
tex_info, gl->prev_info, fbo_tex_info, fbo_tex_info_cnt);
@ -1305,7 +1305,7 @@ static inline void gl_set_shader_viewport(void *data, unsigned shader)
{
gl_t *gl = (gl_t*)data;
if (gl->shader)
gl->shader->use(shader);
gl->shader->use(gl, shader);
gl_set_viewport(gl, gl->win_width, gl->win_height, false, true);
}
@ -1356,7 +1356,7 @@ static inline void gl_draw_texture(void *data)
glBindTexture(GL_TEXTURE_2D, gl->rgui_texture);
if (gl->shader)
gl->shader->use(GL_SHADER_STOCK_BLEND);
gl->shader->use(gl, GL_SHADER_STOCK_BLEND);
gl_shader_set_coords(gl, &gl->coords, &gl->mvp_no_rot);
glEnable(GL_BLEND);
@ -1391,7 +1391,7 @@ static bool gl_frame(void *data, const void *frame, unsigned width, unsigned hei
#endif
if (gl->shader)
gl->shader->use(1);
gl->shader->use(gl, 1);
#ifdef IOS // Apparently the viewport is lost each frame, thanks apple.
gl_set_viewport(gl, gl->win_width, gl->win_height, false, true);
@ -1478,7 +1478,7 @@ static bool gl_frame(void *data, const void *frame, unsigned width, unsigned hei
}
if (gl->shader)
gl->shader->set_params(width, height,
gl->shader->set_params(gl, width, height,
gl->tex_w, gl->tex_h,
gl->vp.width, gl->vp.height,
g_extern.frame_count,
@ -1516,7 +1516,7 @@ static bool gl_frame(void *data, const void *frame, unsigned width, unsigned hei
if (gl->hw_render_fbo_init)
{
if (gl->shader)
gl->shader->use(0);
gl->shader->use(gl, 0);
glBindTexture(GL_TEXTURE_2D, 0);
#ifndef NO_GL_FF_VERTEX
gl_disable_client_arrays(gl);
@ -2574,7 +2574,7 @@ static void gl_render_overlay(void *data)
{
// Ensure that we reset the attrib array.
if (gl->shader)
gl->shader->use(GL_SHADER_STOCK_BLEND);
gl->shader->use(gl, GL_SHADER_STOCK_BLEND);
glBindTexture(GL_TEXTURE_2D, gl->overlay[i].tex);
for (j = 0; j < 4; j++)

@ -155,8 +155,9 @@ static void gl_cg_reset_attrib(void)
cg_attrib_index = 0;
}
static bool gl_cg_set_mvp(const math_matrix *mat)
static bool gl_cg_set_mvp(void *data, const math_matrix *mat)
{
(void)data;
if (cg_active && prg[active_index].mvp)
{
cgGLSetMatrixParameterfc(prg[active_index].mvp, mat->data);
@ -193,7 +194,7 @@ static bool gl_cg_set_coords(const struct gl_coords *coords)
#define set_param_1f(param, x) \
if (param) cgGLSetParameter1f(param, x)
static void gl_cg_set_params(unsigned width, unsigned height,
static void gl_cg_set_params(void *data, unsigned width, unsigned height,
unsigned tex_width, unsigned tex_height,
unsigned out_width, unsigned out_height,
unsigned frame_count,
@ -202,6 +203,7 @@ static void gl_cg_set_params(unsigned width, unsigned height,
const struct gl_tex_info *fbo_info,
unsigned fbo_info_cnt)
{
(void)data;
unsigned i;
if (!cg_active || (active_index == 0) || (active_index == GL_SHADER_STOCK_BLEND))
return;
@ -871,8 +873,10 @@ error:
return false;
}
static void gl_cg_use(unsigned index)
static void gl_cg_use(void *data, unsigned index)
{
(void)data;
if (cg_active && prg[index].vprg && prg[index].fprg)
{
gl_cg_reset_attrib();

@ -36,7 +36,7 @@ struct gl_shader_backend
{
bool (*init)(void *data, const char *path);
void (*deinit)(void);
void (*set_params)(unsigned width, unsigned height,
void (*set_params)(void *data, unsigned width, unsigned height,
unsigned tex_width, unsigned tex_height,
unsigned out_width, unsigned out_height,
unsigned frame_counter,
@ -44,13 +44,13 @@ struct gl_shader_backend
const struct gl_tex_info *prev_info,
const struct gl_tex_info *fbo_info, unsigned fbo_info_cnt);
void (*use)(unsigned index);
void (*use)(void *data, unsigned index);
unsigned (*num_shaders)(void);
bool (*filter_type)(unsigned index, bool *smooth);
enum gfx_wrap_type (*wrap_type)(unsigned index);
void (*shader_scale)(unsigned index, struct gfx_fbo_scale *scale);
bool (*set_coords)(const struct gl_coords *coords);
bool (*set_mvp)(const math_matrix *mat);
bool (*set_mvp)(void *data, const math_matrix *mat);
unsigned (*get_prev_textures)(void);
enum rarch_shader_type type;

@ -871,7 +871,7 @@ error:
return false;
}
static void gl_glsl_set_params(unsigned width, unsigned height,
static void gl_glsl_set_params(void *data, unsigned width, unsigned height,
unsigned tex_width, unsigned tex_height,
unsigned out_width, unsigned out_height,
unsigned frame_count,
@ -879,6 +879,7 @@ static void gl_glsl_set_params(unsigned width, unsigned height,
const struct gl_tex_info *prev_info,
const struct gl_tex_info *fbo_info, unsigned fbo_info_cnt)
{
(void)data;
// We enforce a certain layout for our various texture types in the texunits.
// - Regular frame (Texture) (always bound).
// - LUT textures (always bound).
@ -1077,8 +1078,9 @@ static void gl_glsl_set_params(unsigned width, unsigned height,
}
}
static bool gl_glsl_set_mvp(const math_matrix *mat)
static bool gl_glsl_set_mvp(void *data, const math_matrix *mat)
{
(void)data;
if (!glsl_enable || !glsl_shader->modern)
return false;
@ -1162,8 +1164,9 @@ static bool gl_glsl_set_coords(const struct gl_coords *coords)
return true;
}
static void gl_glsl_use(unsigned index)
static void gl_glsl_use(void *data, unsigned index)
{
(void)data;
if (glsl_enable)
{
gl_glsl_reset_attrib();

@ -100,7 +100,7 @@ void hlsl_set_proj_matrix(XMMATRIX rotation_value)
#define set_param_1f(param, x, constanttable) \
if (param) constanttable->SetFloat(d3d_device_ptr, param, x)
static void hlsl_set_params(unsigned width, unsigned height,
static void hlsl_set_params(void *data, unsigned width, unsigned height,
unsigned tex_width, unsigned tex_height,
unsigned out_width, unsigned out_height,
unsigned frame_counter,
@ -108,7 +108,7 @@ static void hlsl_set_params(unsigned width, unsigned height,
const struct gl_tex_info *prev_info,
const struct gl_tex_info *fbo_info, unsigned fbo_info_cnt)
{
xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)driver.video_data;
xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)data;
LPDIRECT3DDEVICE d3d_device_ptr = (LPDIRECT3DDEVICE)d3d->dev;
if (!hlsl_active)
return;
@ -137,9 +137,9 @@ static void hlsl_set_params(unsigned width, unsigned height,
/* TODO - set lookup textures/FBO textures/state parameters/etc */
}
static bool load_program(unsigned index, const char *prog, bool path_is_file)
static bool load_program(void *data, unsigned index, const char *prog, bool path_is_file)
{
xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)driver.video_data;
xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)data;
LPDIRECT3DDEVICE d3d_device_ptr = (LPDIRECT3DDEVICE)d3d->dev;
HRESULT ret, ret_fp, ret_vp;
ID3DXBuffer *listing_f = NULL;
@ -188,9 +188,9 @@ end:
return ret;
}
static bool load_stock(void)
static bool load_stock(void *data)
{
if (!load_program(0, stock_hlsl_program, false))
if (!load_program(data, 0, stock_hlsl_program, false))
{
RARCH_ERR("Failed to compile passthrough shader, is something wrong with your environment?\n");
return false;
@ -215,7 +215,7 @@ static void set_program_attributes(unsigned i)
prg[i].mvp_val = XMMatrixIdentity();
}
static bool load_shader(const char *cgp_path, unsigned i)
static bool load_shader(void *data, const char *cgp_path, unsigned i)
{
char path_buf[PATH_MAX];
fill_pathname_resolve_relative(path_buf, cgp_path,
@ -223,15 +223,15 @@ static bool load_shader(const char *cgp_path, unsigned i)
RARCH_LOG("Loading Cg/HLSL shader: \"%s\".\n", path_buf);
if (!load_program(i + 1, path_buf, true))
if (!load_program(data, i + 1, path_buf, true))
return false;
return true;
}
static bool load_plain(const char *path)
static bool load_plain(void *data, const char *path)
{
if (!load_stock())
if (!load_stock(data))
return false;
cg_shader = (struct gfx_shader*)calloc(1, sizeof(*cg_shader));
@ -288,9 +288,9 @@ static void hlsl_deinit_state(void)
cg_shader = NULL;
}
static bool load_preset(const char *path)
static bool load_preset(void *data, const char *path)
{
if (!load_stock())
if (!load_stock(data))
return false;
RARCH_LOG("Loading Cg meta-shader: %s\n", path);
@ -323,7 +323,7 @@ static bool load_preset(const char *path)
}
for (unsigned i = 0; i < cg_shader->passes; i++)
{
if (!load_shader(path, i))
if (!load_shader(data, path, i))
{
RARCH_ERR("Failed to load shaders ...\n");
return false;
@ -341,12 +341,12 @@ static bool hlsl_init(void *data, const char *path)
if (path && strcmp(path_get_extension(path), ".cgp") == 0)
{
if (!load_preset(path))
if (!load_preset(d3d, path))
return false;
}
else
{
if (!load_plain(path))
if (!load_plain(d3d, path))
return false;
}
@ -369,9 +369,9 @@ static void hlsl_deinit(void)
hlsl_deinit_state();
}
static void hlsl_use(unsigned index)
static void hlsl_use(void *data, unsigned index)
{
xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)driver.video_data;
xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)data;
LPDIRECT3DDEVICE d3dr = (LPDIRECT3DDEVICE)d3d->dev;
if (hlsl_active && prg[index].vprg && prg[index].fprg)
{
@ -415,9 +415,9 @@ static void hlsl_shader_scale(unsigned index, struct gfx_fbo_scale *scale)
scale->valid = false;
}
static bool hlsl_set_mvp(const math_matrix *mat)
static bool hlsl_set_mvp(void *data, const math_matrix *mat)
{
xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)driver.video_data;
xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)data;
LPDIRECT3DDEVICE d3d_device_ptr = (LPDIRECT3DDEVICE)d3d->dev;
if(hlsl_active && prg[active_index].mvp)

@ -778,9 +778,9 @@ static void set_vertices(void *data, unsigned pass, unsigned width, unsigned hei
{
set_mvp(d3d, d3d->screen_width, d3d->screen_height, d3d->dev_rotation);
if (d3d->shader->use)
d3d->shader->use(pass);
d3d->shader->use(d3d, pass);
if (d3d->shader->set_params)
d3d->shader->set_params(width, height, d3d->tex_w, d3d->tex_h, d3d->screen_width,
d3d->shader->set_params(d3d, width, height, d3d->tex_w, d3d->tex_h, d3d->screen_width,
d3d->screen_height, g_extern.frame_count,
NULL, NULL, NULL, 0);
}