From 62ae5f1d6f78a30827fad19b215e1084c71b833d Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 6 Apr 2015 23:26:14 +0200 Subject: [PATCH] (D3D) Add renderchain_reinit --- gfx/d3d/d3d.cpp | 44 +++++++++++------------------------ gfx/d3d/render_chain_cg.cpp | 1 + gfx/d3d/render_chain_null.cpp | 1 + gfx/d3d/render_chain_xdk.cpp | 19 +++++++++++++++ 4 files changed, 34 insertions(+), 31 deletions(-) diff --git a/gfx/d3d/d3d.cpp b/gfx/d3d/d3d.cpp index 08e8d27c2c..667b357f4d 100644 --- a/gfx/d3d/d3d.cpp +++ b/gfx/d3d/d3d.cpp @@ -69,11 +69,6 @@ static void d3d_free_overlays(d3d_video_t *d3d); static void d3d_free_overlay(d3d_video_t *d3d, overlay_t *overlay); #endif -#ifdef _XBOX -static void d3d_reinit_renderchain(void *data, - const video_info_t *video); -#endif - void d3d_make_d3dpp(void *data, const video_info_t *info, D3DPRESENT_PARAMETERS *d3dpp); @@ -663,17 +658,21 @@ static void *d3d_init(const video_info_t *info, /* Reinitialize renderchain as we * might have changed pixel formats.*/ - d3d_reinit_renderchain(vid, info); - - if (input && input_data) + if (d3d->renderchain_driver->reinit(vid, info)) { - *input = driver->input; - *input_data = driver->input_data; - } + d3d_deinit_chain(d3d); + d3d_init_chain(d3d, video); - driver->video_data_own = true; - driver->input_data_own = true; - return driver->video_data; + if (input && input_data) + { + *input = driver->input; + *input_data = driver->input_data; + } + + driver->video_data_own = true; + driver->input_data_own = true; + return driver->video_data; + } } #endif @@ -960,23 +959,6 @@ static bool d3d_init_chain(d3d_video_t *d3d, const video_info_t *video_info) } #ifdef _XBOX -static void d3d_reinit_renderchain(void *data, - const video_info_t *video) -{ - d3d_video_t *d3d = (d3d_video_t*)data; - - if (!d3d) - return; - - d3d->pixel_size = video->rgb32 ? sizeof(uint32_t) : sizeof(uint16_t); - d3d->tex_w = d3d->tex_h = RARCH_SCALE_BASE * video->input_scale; - RARCH_LOG( - "Reinitializing renderchain - and textures (%u x %u @ %u bpp)\n", - d3d->tex_w, d3d->tex_h, d3d->pixel_size * CHAR_BIT); - - d3d_deinit_chain(d3d); - d3d_init_chain(d3d, video); -} #ifdef HAVE_RMENU extern struct texture_image *menu_texture; diff --git a/gfx/d3d/render_chain_cg.cpp b/gfx/d3d/render_chain_cg.cpp index cad288ca97..fb4179c6c1 100644 --- a/gfx/d3d/render_chain_cg.cpp +++ b/gfx/d3d/render_chain_cg.cpp @@ -1493,6 +1493,7 @@ renderchain_driver_t cg_d3d9_renderchain = { cg_d3d9_renderchain_new, cg_d3d9_renderchain_init_shader, cg_d3d9_renderchain_init_shader_fvf, + NULL, cg_d3d9_renderchain_init, cg_d3d9_renderchain_set_final_viewport, cg_d3d9_renderchain_add_pass, diff --git a/gfx/d3d/render_chain_null.cpp b/gfx/d3d/render_chain_null.cpp index 55c6d61a03..f66f8bf306 100644 --- a/gfx/d3d/render_chain_null.cpp +++ b/gfx/d3d/render_chain_null.cpp @@ -144,6 +144,7 @@ renderchain_driver_t null_renderchain = { null_renderchain_new, null_renderchain_init_shader, null_renderchain_init_shader_fvf, + NULL, null_renderchain_init, null_renderchain_set_final_viewport, null_renderchain_add_pass, diff --git a/gfx/d3d/render_chain_xdk.cpp b/gfx/d3d/render_chain_xdk.cpp index 94832078d8..3b7cfbb97e 100644 --- a/gfx/d3d/render_chain_xdk.cpp +++ b/gfx/d3d/render_chain_xdk.cpp @@ -415,11 +415,30 @@ static void xdk_renderchain_convert_geometry( /* stub */ } +static bool xdk_renderchain_reinit(void *data, + const void *video_data) +{ + d3d_video_t *d3d = (d3d_video_t*)data; + const video_info_t *video = (const video_info_t*)video_data; + + if (!d3d) + return false; + + d3d->pixel_size = video->rgb32 ? sizeof(uint32_t) : sizeof(uint16_t); + d3d->tex_w = d3d->tex_h = RARCH_SCALE_BASE * video->input_scale; + RARCH_LOG( + "Reinitializing renderchain - and textures (%u x %u @ %u bpp)\n", + d3d->tex_w, d3d->tex_h, d3d->pixel_size * CHAR_BIT); + + true; +} + renderchain_driver_t xdk_renderchain = { xdk_renderchain_free, xdk_renderchain_new, xdk_renderchain_init_shader, xdk_renderchain_init_shader_fvf, + xdk_renderchain_reinit, xdk_renderchain_init, xdk_renderchain_set_final_viewport, xdk_renderchain_add_pass,