(D3D) Combine deinit functions into one

This commit is contained in:
twinaphex 2015-04-06 21:32:49 +02:00
parent 9b5ba3af36
commit bdc97fd5c3
5 changed files with 38 additions and 46 deletions

View File

@ -96,11 +96,7 @@ static unsigned monitor_count;
static void d3d_deinit_chain(d3d_video_t *d3d)
{
d3d->renderchain_driver->deinit_shader();
d3d->renderchain_driver->deinit(d3d->renderchain_data);
#ifdef _XBOX
d3d->renderchain_driver->chain_free(d3d);
#endif
d3d->renderchain_driver = NULL;
d3d->renderchain_data = NULL;

View File

@ -247,7 +247,7 @@ static void renderchain_set_shaders(void *data, void *fragment_data, void *verte
cgD3D9BindProgram(*vPrg);
}
static void renderchain_destroy_stock_shader(void *data)
static void cg_d3d9_renderchain_destroy_stock_shader(void *data)
{
cg_renderchain_t *chain = (cg_renderchain_t*)data;
@ -708,7 +708,7 @@ static void renderchain_bind_pass(void *data, void *pass_data, unsigned pass_ind
}
}
static void renderchain_clear(void *data)
static void cg_d3d9_renderchain_clear(void *data)
{
unsigned i;
cg_renderchain_t *chain = (cg_renderchain_t*)data;
@ -741,6 +741,25 @@ static void renderchain_clear(void *data)
chain->luts.clear();
}
static void cg_d3d9_renderchain_deinit_shader(void)
{
if (!cgCtx)
return;
cgD3D9UnloadAllPrograms();
cgD3D9SetDevice(NULL);
cgDestroyContext(cgCtx);
cgCtx = NULL;
}
static void cg_d3d9_renderchain_deinit(void *data)
{
cg_renderchain_t *renderchain = (cg_renderchain_t*)data;
if (renderchain)
free(renderchain);
}
void cg_d3d9_renderchain_free(void *data)
{
cg_renderchain_t *chain = (cg_renderchain_t*)data;
@ -748,10 +767,12 @@ void cg_d3d9_renderchain_free(void *data)
if (!chain)
return;
renderchain_clear(chain);
renderchain_destroy_stock_shader(chain);
cg_d3d9_renderchain_deinit_shader();
cg_d3d9_renderchain_clear(chain);
cg_d3d9_renderchain_destroy_stock_shader(chain);
if (chain->tracker)
state_tracker_free(chain->tracker);
cg_d3d9_renderchain_deinit();
}
void *cg_d3d9_renderchain_new(void)
@ -763,16 +784,6 @@ void *cg_d3d9_renderchain_new(void)
return renderchain;
}
static void cg_d3d9_renderchain_deinit_shader(void)
{
if (!cgCtx)
return;
cgD3D9UnloadAllPrograms();
cgD3D9SetDevice(NULL);
cgDestroyContext(cgCtx);
cgCtx = NULL;
}
static bool cg_d3d9_renderchain_init_shader(void *data)
{
@ -793,13 +804,6 @@ static bool cg_d3d9_renderchain_init_shader(void *data)
return true;
}
static void cg_d3d9_renderchain_deinit(void *data)
{
cg_renderchain_t *renderchain = (cg_renderchain_t*)data;
if (renderchain)
free(renderchain);
}
static void renderchain_log_info(void *data, const void *info_data)
{
@ -1485,8 +1489,6 @@ static bool cg_d3d9_renderchain_render(void *chain_data, const void *data,
renderchain_driver_t cg_d3d9_renderchain = {
cg_d3d9_renderchain_free,
cg_d3d9_renderchain_new,
cg_d3d9_renderchain_deinit,
cg_d3d9_renderchain_deinit_shader,
cg_d3d9_renderchain_init_shader,
cg_d3d9_renderchain_init_shader_fvf,
cg_d3d9_renderchain_init,

View File

@ -39,8 +39,6 @@ typedef struct renderchain_driver
{
void (*chain_free)(void *data);
void *(*chain_new)(void);
void (*deinit)(void *data);
void (*deinit_shader)(void);
bool (*init_shader)(void *data);
bool (*init_shader_fvf)(void *data, void *pass_data);
bool (*init)(void *data,

View File

@ -44,10 +44,6 @@ static void *null_renderchain_new(void)
return renderchain;
}
static void null_renderchain_deinit_shader(void)
{
}
static bool null_renderchain_init_shader(void *data)
{
(void)data;
@ -146,8 +142,6 @@ static void null_renderchain_convert_geometry(
renderchain_driver_t null_renderchain = {
null_renderchain_free,
null_renderchain_new,
null_renderchain_deinit,
null_renderchain_deinit_shader,
null_renderchain_init_shader,
null_renderchain_init_shader_fvf,
null_renderchain_init,

View File

@ -45,7 +45,7 @@ static void renderchain_set_mvp(void *data, unsigned vp_width,
#endif
}
static void renderchain_clear(void *data)
static void xdk_renderchain_clear(void *data)
{
d3d_video_t *d3d = (d3d_video_t*)data;
@ -227,6 +227,14 @@ static void renderchain_blit_to_texture(void *data, const void *frame,
&d3dlr, frame, width, height, pitch);
}
static void xdk_renderchain_deinit(void *data)
{
xdk_renderchain_t *renderchain = (xdk_renderchain_t*)data;
if (renderchain)
free(renderchain);
}
static void xdk_renderchain_free(void *data)
{
d3d_video_t *chain = (d3d_video_t*)data;
@ -234,7 +242,10 @@ static void xdk_renderchain_free(void *data)
if (!chain)
return;
renderchain_clear(chain);
xdk_renderchain_deinit_shader(chain);
xdk_renderchain_deinit(chain->renderchain_data);
xdk_renderchain_clear(chain);
#ifndef DONT_HAVE_STATE_TRACKER
#ifndef _XBOX
if (chain->tracker)
@ -243,13 +254,6 @@ static void xdk_renderchain_free(void *data)
#endif
}
void xdk_renderchain_deinit(void *data)
{
xdk_renderchain_t *renderchain = (xdk_renderchain_t*)data;
if (renderchain)
free(renderchain);
}
void *xdk_renderchain_new(void)
{
@ -413,8 +417,6 @@ static void xdk_renderchain_convert_geometry(
renderchain_driver_t xdk_renderchain = {
xdk_renderchain_free,
xdk_renderchain_new,
xdk_renderchain_deinit,
xdk_renderchain_deinit_shader,
xdk_renderchain_init_shader,
xdk_renderchain_init_shader_fvf,
xdk_renderchain_init,