This commit is contained in:
twinaphex 2016-01-08 18:23:40 +01:00
parent e334278696
commit 208ce772cf
1 changed files with 24 additions and 15 deletions

View File

@ -718,12 +718,18 @@ static void renderchain_bind_pass(cg_renderchain_t *chain,
} }
} }
static void cg_d3d9_renderchain_clear_passes(cg_renderchain_t *chain) static void d3d9_cg_deinit_progs(void *data)
{ {
unsigned i; unsigned i;
cg_renderchain_t *chain = (cg_renderchain_t*)data;
if (!chain)
return;
if (chain->passes.size() == 0) if (chain->passes.size() == 0)
return; return;
RARCH_LOG("CG: Destroying programs.\n");
d3d_vertex_buffer_free(NULL, chain->passes[0].vertex_decl); d3d_vertex_buffer_free(NULL, chain->passes[0].vertex_decl);
for (i = 1; i < chain->passes.size(); i++) for (i = 1; i < chain->passes.size(); i++)
@ -748,7 +754,7 @@ static void cg_d3d9_renderchain_clear(cg_renderchain_t *chain)
d3d_vertex_buffer_free(chain->prev.vertex_buf[i], NULL); d3d_vertex_buffer_free(chain->prev.vertex_buf[i], NULL);
} }
cg_d3d9_renderchain_clear_passes(chain); d3d9_cg_deinit_progs(chain);
for (i = 0; i < chain->luts.size(); i++) for (i = 0; i < chain->luts.size(); i++)
{ {
@ -756,22 +762,23 @@ static void cg_d3d9_renderchain_clear(cg_renderchain_t *chain)
d3d_texture_free(chain->luts[i].tex); d3d_texture_free(chain->luts[i].tex);
} }
#if 0
if (chain->tracker)
state_tracker_free(chain->tracker);
chain->tracker = NULL;
#endif
chain->luts.clear(); chain->luts.clear();
if (chain->tracker)
{
state_tracker_free(chain->tracker);
chain->tracker = NULL;
}
} }
static void cg_d3d9_renderchain_deinit_shader(cg_renderchain_t *chain) static void d3d9_cg_deinit_context_state(void *data)
{ {
if (!chain || !chain->cgCtx) cg_renderchain_t *chain = (cg_renderchain_t*)data;
return; if (chain->cgCtx)
{
cgD3D9UnloadAllPrograms(); RARCH_LOG("CG: Destroying context.\n");
cgD3D9SetDevice(NULL); cgDestroyContext(chain->cgCtx);
cgDestroyContext(chain->cgCtx); }
chain->cgCtx = NULL; chain->cgCtx = NULL;
} }
@ -789,7 +796,9 @@ void cg_d3d9_renderchain_free(void *data)
return; return;
cg_d3d9_renderchain_clear(chain); cg_d3d9_renderchain_clear(chain);
cg_d3d9_renderchain_deinit_shader(chain); cgD3D9UnloadAllPrograms();
cgD3D9SetDevice(NULL);
d3d9_cg_deinit_context_state(chain);
cg_d3d9_renderchain_destroy_stock_shader(chain); cg_d3d9_renderchain_destroy_stock_shader(chain);
cg_d3d9_renderchain_deinit(chain); cg_d3d9_renderchain_deinit(chain);
} }