mirror of
https://github.com/libretro/RetroArch
synced 2025-02-14 06:40:48 +00:00
Refactor more D3D9 HLSL renderchain code
This commit is contained in:
parent
5bb1b2ef7c
commit
bef7b481c6
@ -47,13 +47,6 @@ struct shader_program_hlsl_data
|
|||||||
LPDIRECT3DVERTEXSHADER9 vprg;
|
LPDIRECT3DVERTEXSHADER9 vprg;
|
||||||
LPDIRECT3DPIXELSHADER9 fprg;
|
LPDIRECT3DPIXELSHADER9 fprg;
|
||||||
|
|
||||||
D3DXHANDLE vid_size_f;
|
|
||||||
D3DXHANDLE tex_size_f;
|
|
||||||
D3DXHANDLE out_size_f;
|
|
||||||
D3DXHANDLE vid_size_v;
|
|
||||||
D3DXHANDLE tex_size_v;
|
|
||||||
D3DXHANDLE out_size_v;
|
|
||||||
D3DXHANDLE frame_dir_v;
|
|
||||||
D3DXHANDLE mvp;
|
D3DXHANDLE mvp;
|
||||||
|
|
||||||
LPD3DXCONSTANTTABLE v_ctable;
|
LPD3DXCONSTANTTABLE v_ctable;
|
||||||
@ -86,6 +79,14 @@ static void *d3d9_hlsl_get_constant_by_name(void *data, const char *name)
|
|||||||
return d3d9x_constant_table_get_constant_by_name(prog, NULL, lbl);
|
return d3d9x_constant_table_get_constant_by_name(prog, NULL, lbl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static INLINE void d3d9_hlsl_set_param_2f(void *data, void *userdata, const char *name, const void *values)
|
||||||
|
{
|
||||||
|
LPD3DXCONSTANTTABLE prog = (LPD3DXCONSTANTTABLE)data;
|
||||||
|
D3DXHANDLE param = d3d9_hlsl_get_constant_by_name(prog, name);
|
||||||
|
if (param)
|
||||||
|
d3d9x_constant_table_set_float_array((LPDIRECT3DDEVICE9)userdata, prog, (void*)param, values, 2);
|
||||||
|
}
|
||||||
|
|
||||||
static INLINE void d3d9_hlsl_set_param_1f(void *data, void *userdata, const char *name, const void *value)
|
static INLINE void d3d9_hlsl_set_param_1f(void *data, void *userdata, const char *name, const void *value)
|
||||||
{
|
{
|
||||||
LPD3DXCONSTANTTABLE prog = (LPD3DXCONSTANTTABLE)data;
|
LPD3DXCONSTANTTABLE prog = (LPD3DXCONSTANTTABLE)data;
|
||||||
@ -208,24 +209,10 @@ static void hlsl_set_program_attributes(hlsl_shader_data_t *hlsl,
|
|||||||
if (!program)
|
if (!program)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
fprg = program->f_ctable;
|
|
||||||
vprg = program->v_ctable;
|
vprg = program->v_ctable;
|
||||||
|
|
||||||
if (fprg)
|
|
||||||
{
|
|
||||||
program->vid_size_f = (D3DXHANDLE)d3d9_hlsl_get_constant_by_name(fprg, "IN.video_size");
|
|
||||||
program->tex_size_f = (D3DXHANDLE)d3d9_hlsl_get_constant_by_name(fprg, "IN.texture_size");
|
|
||||||
program->out_size_f = (D3DXHANDLE)d3d9_hlsl_get_constant_by_name(fprg, "IN.output_size");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vprg)
|
if (vprg)
|
||||||
{
|
|
||||||
program->vid_size_v = (D3DXHANDLE)d3d9_hlsl_get_constant_by_name(vprg, "IN.video_size");
|
|
||||||
program->tex_size_v = (D3DXHANDLE)d3d9_hlsl_get_constant_by_name(vprg, "IN.texture_size");
|
|
||||||
program->out_size_v = (D3DXHANDLE)d3d9_hlsl_get_constant_by_name(vprg, "IN.output_size");
|
|
||||||
program->frame_dir_v = (D3DXHANDLE)d3d9_hlsl_get_constant_by_name(vprg, "IN.frame_direction");
|
|
||||||
program->mvp = (D3DXHANDLE)d3d9_hlsl_get_constant_by_name(vprg, "modelViewProj");
|
program->mvp = (D3DXHANDLE)d3d9_hlsl_get_constant_by_name(vprg, "modelViewProj");
|
||||||
}
|
|
||||||
|
|
||||||
d3d_matrix_identity(&program->mvp_val);
|
d3d_matrix_identity(&program->mvp_val);
|
||||||
}
|
}
|
||||||
@ -434,27 +421,20 @@ static void hlsl_set_params(hlsl_shader_data_t *hlsl,
|
|||||||
d3d9x_constant_table_set_defaults(d3dr, fprg);
|
d3d9x_constant_table_set_defaults(d3dr, fprg);
|
||||||
d3d9x_constant_table_set_defaults(d3dr, vprg);
|
d3d9x_constant_table_set_defaults(d3dr, vprg);
|
||||||
|
|
||||||
if (program->vid_size_f)
|
|
||||||
d3d9x_constant_table_set_float_array(d3dr, fprg, (void*)program->vid_size_f, ori_size, 2);
|
|
||||||
if (program->tex_size_f)
|
|
||||||
d3d9x_constant_table_set_float_array(d3dr, fprg, (void*)program->tex_size_f, tex_size, 2);
|
|
||||||
if (program->out_size_f)
|
|
||||||
d3d9x_constant_table_set_float_array(d3dr, fprg, (void*)program->out_size_f, out_size, 2);
|
|
||||||
|
|
||||||
if (state_manager_frame_is_reversed())
|
if (state_manager_frame_is_reversed())
|
||||||
frame_dir = -1.0f;
|
frame_dir = -1.0f;
|
||||||
|
|
||||||
|
d3d9_hlsl_set_param_2f(fprg, d3dr, "IN.video_size", &ori_size);
|
||||||
|
d3d9_hlsl_set_param_2f(fprg, d3dr, "IN.texture_size", &tex_size);
|
||||||
|
d3d9_hlsl_set_param_2f(fprg, d3dr, "IN.output_size", &out_size);
|
||||||
d3d9_hlsl_set_param_1f(fprg, d3dr, "IN.frame_count", &frame_cnt);
|
d3d9_hlsl_set_param_1f(fprg, d3dr, "IN.frame_count", &frame_cnt);
|
||||||
d3d9_hlsl_set_param_1f(vprg, d3dr, "IN.frame_count", &frame_cnt);
|
|
||||||
d3d9_hlsl_set_param_1f(fprg, d3dr, "IN.frame_direction", &frame_dir);
|
d3d9_hlsl_set_param_1f(fprg, d3dr, "IN.frame_direction", &frame_dir);
|
||||||
d3d9_hlsl_set_param_1f(vprg, d3dr, "IN.frame_direction", &frame_dir);
|
|
||||||
|
|
||||||
if (program->vid_size_v)
|
d3d9_hlsl_set_param_2f(vprg, d3dr, "IN.video_size", &ori_size);
|
||||||
d3d9x_constant_table_set_float_array(d3dr, vprg, (void*)program->vid_size_v, ori_size, 2);
|
d3d9_hlsl_set_param_2f(vprg, d3dr, "IN.texture_size", &tex_size);
|
||||||
if (program->tex_size_v)
|
d3d9_hlsl_set_param_2f(vprg, d3dr, "IN.output_size", &out_size);
|
||||||
d3d9x_constant_table_set_float_array(d3dr, vprg, (void*)program->tex_size_v, tex_size, 2);
|
d3d9_hlsl_set_param_1f(vprg, d3dr, "IN.frame_count", &frame_cnt);
|
||||||
if (program->out_size_v)
|
d3d9_hlsl_set_param_1f(vprg, d3dr, "IN.frame_direction", &frame_dir);
|
||||||
d3d9x_constant_table_set_float_array(d3dr, vprg, (void*)program->out_size_v, out_size, 2);
|
|
||||||
|
|
||||||
/* TODO - set lookup textures/FBO textures/state parameters/etc */
|
/* TODO - set lookup textures/FBO textures/state parameters/etc */
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user