Take out add_state_tracker function callback for D3D9 renderchain

This commit is contained in:
twinaphex 2018-05-14 06:33:26 +02:00
parent dad1e9e52a
commit 232d3f4d92
4 changed files with 37 additions and 65 deletions

View File

@ -51,8 +51,8 @@ typedef struct d3d9_renderchain_driver
bool (*add_lut)(void *data,
const char *id, const char *path,
bool smooth);
void (*add_state_tracker)(void *data, void *tracker_data);
bool (*render)(d3d9_video_t *d3d, const void *frame,
bool (*render)(d3d9_video_t *d3d, state_tracker_t *tracker,
const void *frame,
unsigned width, unsigned height, unsigned pitch, unsigned rotation);
void (*convert_geometry)(void *data, const struct LinkInfo *info,
unsigned *out_width, unsigned *out_height,
@ -86,6 +86,7 @@ typedef struct d3d9_video
math_matrix_4x4 mvp_rotate;
math_matrix_4x4 mvp_transposed;
state_tracker_t *state_tracker;
struct video_viewport vp;
struct video_shader shader;
video_info_t video_info;

View File

@ -129,8 +129,7 @@ static bool d3d9_init_imports(d3d9_video_t *d3d)
return false;
}
d3d->renderchain_driver->add_state_tracker(
d3d->renderchain_data, state_tracker);
d3d->state_tracker = state_tracker;
return true;
}
@ -319,13 +318,10 @@ static bool d3d9_init_chain(d3d9_video_t *d3d, const video_info_t *video_info)
}
}
if (d3d->renderchain_driver->add_state_tracker)
if (!d3d9_init_imports(d3d))
{
if (!d3d9_init_imports(d3d))
{
RARCH_ERR("[D3D9]: Failed to init imports.\n");
return false;
}
RARCH_ERR("[D3D9]: Failed to init imports.\n");
return false;
}
}
@ -611,6 +607,11 @@ static void d3d9_deinitialize(d3d9_video_t *d3d)
d3d9_deinit_chain(d3d);
d3d9_vertex_buffer_free(d3d->menu_display.buffer, d3d->menu_display.decl);
if (d3d->state_tracker)
state_tracker_free(d3d->state_tracker);
d3d->state_tracker = NULL;
d3d->menu_display.buffer = NULL;
d3d->menu_display.decl = NULL;
}
@ -1646,7 +1647,7 @@ static bool d3d9_frame(void *data, const void *frame,
}
if (!d3d->renderchain_driver->render(
d3d,
d3d, d3d->state_tracker,
frame, frame_width, frame_height,
pitch, d3d->dev_rotation))
{

View File

@ -122,7 +122,6 @@ typedef struct cg_renderchain
struct unsigned_vector_list *bound_tex;
struct unsigned_vector_list *bound_vert;
struct lut_info_vector_list *luts;
state_tracker_t *state_tracker;
CGcontext cgCtx;
} cg_renderchain_t;
@ -696,12 +695,6 @@ static void d3d9_cg_destroy_resources(void *data)
d3d9_texture_free(cg_data->luts->data[i].tex);
}
if (cg_data->state_tracker)
{
state_tracker_free(cg_data->state_tracker);
cg_data->state_tracker = NULL;
}
cgD3D9UnloadAllPrograms();
cgD3D9SetDevice(NULL);
}
@ -870,7 +863,6 @@ static bool d3d9_cg_renderchain_init(
}
chain->dev = dev;
chain->state_tracker = NULL;
chain->final_viewport = (D3DVIEWPORT9*)final_viewport;
chain->frame_count = 0;
chain->pixel_size = (fmt == RETRO_PIXEL_FORMAT_RGB565) ? 2 : 4;
@ -1115,16 +1107,6 @@ static bool d3d9_cg_renderchain_add_lut(void *data,
return true;
}
static void d3d9_cg_renderchain_add_state_tracker(
void *data, void *tracker_data)
{
state_tracker_t *tracker = (state_tracker_t*)tracker_data;
cg_renderchain_t *chain = (cg_renderchain_t*)data;
if (chain->state_tracker)
state_tracker_free(chain->state_tracker);
chain->state_tracker = tracker;
}
static void d3d9_cg_renderchain_start_render(cg_renderchain_t *chain)
{
chain->passes->data[0].tex = chain->prev.tex[chain->prev.ptr];
@ -1324,36 +1306,34 @@ static void cg_d3d9_renderchain_unbind_all(cg_renderchain_t *chain)
static void cg_d3d9_renderchain_set_params(
cg_renderchain_t *chain,
struct cg_pass *pass,
state_tracker_t *tracker,
unsigned pass_index)
{
unsigned i;
/* Set state parameters. */
if (chain->state_tracker)
/* Only query uniforms in first pass. */
static struct state_tracker_uniform tracker_info[GFX_MAX_VARIABLES];
static unsigned cnt = 0;
if (pass_index == 1)
cnt = state_tracker_get_uniform(chain->state_tracker, tracker_info,
GFX_MAX_VARIABLES, chain->frame_count);
for (i = 0; i < cnt; i++)
{
/* Only query uniforms in first pass. */
static struct state_tracker_uniform tracker_info[GFX_MAX_VARIABLES];
static unsigned cnt = 0;
if (pass_index == 1)
cnt = state_tracker_get_uniform(chain->state_tracker, tracker_info,
GFX_MAX_VARIABLES, chain->frame_count);
for (i = 0; i < cnt; i++)
{
CGparameter param_f = cgGetNamedParameter(
pass->fPrg, tracker_info[i].id);
CGparameter param_v = cgGetNamedParameter(
pass->vPrg, tracker_info[i].id);
d3d9_cg_set_param_1f(param_f, &tracker_info[i].value);
d3d9_cg_set_param_1f(param_v, &tracker_info[i].value);
}
CGparameter param_f = cgGetNamedParameter(
pass->fPrg, tracker_info[i].id);
CGparameter param_v = cgGetNamedParameter(
pass->vPrg, tracker_info[i].id);
d3d9_cg_set_param_1f(param_f, &tracker_info[i].value);
d3d9_cg_set_param_1f(param_v, &tracker_info[i].value);
}
}
static void cg_d3d9_renderchain_render_pass(
cg_renderchain_t *chain,
struct cg_pass *pass,
state_tracker_t *tracker,
unsigned pass_index)
{
unsigned i, index;
@ -1407,7 +1387,8 @@ static void cg_d3d9_renderchain_render_pass(
d3d9_cg_renderchain_bind_pass(chain, pass, pass_index);
cg_d3d9_renderchain_set_params(chain, pass, pass_index);
if (tracker)
cg_d3d9_renderchain_set_params(chain, pass, tracker, pass_index);
d3d9_draw_primitive(chain->dev, D3DPT_TRIANGLESTRIP, 0, 2);
@ -1421,6 +1402,7 @@ static void cg_d3d9_renderchain_render_pass(
static bool d3d9_cg_renderchain_render(
d3d9_video_t *d3d,
state_tracker_t *tracker,
const void *frame_data,
unsigned width, unsigned height,
unsigned pitch, unsigned rotation)
@ -1479,7 +1461,8 @@ static bool d3d9_cg_renderchain_render(
out_width, out_height, 0);
if (chain)
cg_d3d9_renderchain_render_pass(chain, from_pass, i + 1);
cg_d3d9_renderchain_render_pass(chain, tracker,
from_pass, i + 1);
current_width = out_width;
current_height = out_height;
@ -1505,7 +1488,7 @@ static bool d3d9_cg_renderchain_render(
rotation);
if (chain)
cg_d3d9_renderchain_render_pass(chain,
cg_d3d9_renderchain_render_pass(chain, tracker,
last_pass, chain->passes->count);
chain->frame_count++;
@ -1620,7 +1603,6 @@ d3d9_renderchain_driver_t cg_d3d9_renderchain = {
d3d9_cg_renderchain_set_final_viewport,
d3d9_cg_renderchain_add_pass,
d3d9_cg_renderchain_add_lut,
d3d9_cg_renderchain_add_state_tracker,
d3d9_cg_renderchain_render,
d3d9_cg_renderchain_convert_geometry,
d3d9_cg_renderchain_set_font_rect,

View File

@ -282,9 +282,6 @@ static bool hlsl_d3d9_renderchain_init(
}
chain->dev = dev;
#if 0
chain->state_tracker = NULL;
#endif
chain->final_viewport = (D3DVIEWPORT9*)final_viewport;
chain->frame_count = 0;
chain->pixel_size = (fmt == RETRO_PIXEL_FORMAT_RGB565) ? 2 : 4;
@ -305,6 +302,7 @@ static void hlsl_d3d9_renderchain_set_final_viewport(
static bool hlsl_d3d9_renderchain_render(
d3d9_video_t *d3d,
state_tracker_t *tracker,
const void *frame,
unsigned frame_width, unsigned frame_height,
unsigned pitch, unsigned rotation)
@ -350,15 +348,6 @@ static bool hlsl_d3d9_renderchain_add_pass(
return true;
}
static void hlsl_d3d9_renderchain_add_state_tracker(
void *data, void *tracker_data)
{
(void)data;
(void)tracker_data;
/* stub */
}
static void hlsl_d3d9_renderchain_convert_geometry(
void *data, const struct LinkInfo *info,
unsigned *out_width, unsigned *out_height,
@ -380,7 +369,6 @@ d3d9_renderchain_driver_t hlsl_d3d9_renderchain = {
hlsl_d3d9_renderchain_set_final_viewport,
hlsl_d3d9_renderchain_add_pass,
NULL,
hlsl_d3d9_renderchain_add_state_tracker,
hlsl_d3d9_renderchain_render,
hlsl_d3d9_renderchain_convert_geometry,
NULL,