diff --git a/gfx/d3d/d3d.cpp b/gfx/d3d/d3d.cpp index c3296faf60..8a691b4c14 100644 --- a/gfx/d3d/d3d.cpp +++ b/gfx/d3d/d3d.cpp @@ -903,7 +903,10 @@ static bool d3d_init_chain(d3d_video_t *d3d, const video_info_t *video_info) #endif #ifdef _XBOX - if (!renderchain_init(d3d, video_info)) + if (!renderchain_init(d3d, video_info, + NULL, NULL, NULL, + video_info->rgb32 ? + RETRO_PIXEL_FORMAT_XRGB8888 : RETRO_PIXEL_FORMAT_RGB565)) { RARCH_ERR("[D3D]: Failed to init render chain.\n"); return false; diff --git a/gfx/d3d/render_chain.h b/gfx/d3d/render_chain.h index 0b87b499c1..69d946ac52 100644 --- a/gfx/d3d/render_chain.h +++ b/gfx/d3d/render_chain.h @@ -48,8 +48,8 @@ bool renderchain_init_shader(void *data); bool renderchain_init(void *data, const video_info_t *video_info, - void *dev_, - const void *final_viewport_, + void *dev_data, + const void *final_viewport_data, const void *info_data, unsigned fmt); diff --git a/gfx/d3d/render_chain_xdk.h b/gfx/d3d/render_chain_xdk.h index faf69e31e3..4f50e0cf6b 100644 --- a/gfx/d3d/render_chain_xdk.h +++ b/gfx/d3d/render_chain_xdk.h @@ -199,37 +199,6 @@ static void renderchain_blit_to_texture(void *data, const void *frame, &d3dlr, frame, width, height, pitch); } -static void renderchain_render_pass(void *data, const void *frame, - unsigned width, unsigned height, unsigned pitch, unsigned rotation) -{ - unsigned i; - d3d_video_t *d3d = (d3d_video_t*)data; - LPDIRECT3DDEVICE d3dr = (LPDIRECT3DDEVICE)d3d->dev; - runloop_t *runloop = rarch_main_get_ptr(); - settings_t *settings = config_get_ptr(); - - renderchain_blit_to_texture(d3d, frame, width, height, pitch); - renderchain_set_vertices(d3d, 1, width, height); - - d3d_set_texture(d3dr, 0, d3d->tex); - d3d_set_viewport(d3d->dev, &d3d->final_viewport); - d3d_set_sampler_minfilter(d3dr, 0, settings->video.smooth ? - D3DTEXF_LINEAR : D3DTEXF_POINT); - d3d_set_sampler_magfilter(d3dr, 0, settings->video.smooth ? - D3DTEXF_LINEAR : D3DTEXF_POINT); - -#if defined(_XBOX1) - d3d_set_vertex_shader(d3dr, D3DFVF_XYZ | D3DFVF_TEX1, NULL); -#elif defined(_XBOX360) - D3DDevice_SetVertexDeclaration(d3dr, d3d->vertex_decl); -#endif - for (i = 0; i < 4; i++) - d3d_set_stream_source(d3dr, i, d3d->vertex_buf, 0, sizeof(Vertex)); - - d3d_draw_primitive(d3dr, D3DPT_TRIANGLESTRIP, 0, 2); - renderchain_set_mvp(d3d, d3d->screen_width, d3d->screen_height, d3d->dev_rotation); -} - void renderchain_free(void *data) { d3d_video_t *chain = (d3d_video_t*)data; @@ -246,37 +215,6 @@ void renderchain_free(void *data) #endif } -bool renderchain_init_shader_fvf(void *data, void *pass_data) -{ - d3d_video_t *chain = (d3d_video_t*)data; - d3d_video_t *pass = (d3d_video_t*)data; - LPDIRECT3DDEVICE d3dr = (LPDIRECT3DDEVICE)chain->dev; - - (void)pass_data; - -#if defined(_XBOX360) - static const D3DVERTEXELEMENT VertexElements[] = - { - { 0, 0 * sizeof(float), D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 }, - { 0, 2 * sizeof(float), D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 }, - D3DDECL_END() - }; - - if (FAILED(d3dr->CreateVertexDeclaration(VertexElements, &pass->vertex_decl))) - return false; -#endif - - return true; -} - -void renderchain_set_final_viewport(void *data, - void *renderchain_data, const void *viewport_data) -{ - (void)data; - (void)renderchain_data; - (void)viewport_data; -} - void renderchain_deinit(void *data) { } @@ -309,13 +247,23 @@ bool renderchain_init_shader(void *data) } bool renderchain_init(void *data, - const video_info_t *info) + const video_info_t *info, + void *dev_data, + const void *final_viewport_data, + const void *info_data, + unsigned fmt + ) { d3d_video_t *chain = (d3d_video_t*)data; LPDIRECT3DDEVICE d3dr = (LPDIRECT3DDEVICE)chain->dev; global_t *global = global_get_ptr(); - chain->pixel_size = info->rgb32 ? sizeof(uint32_t) : sizeof(uint16_t); + (void)dev_data; + (void)final_viewport_data; + (void)info_data; + (void)fmt; + + chain->pixel_size = fmt ? sizeof(uint32_t) : sizeof(uint16_t); if (!renderchain_create_first_pass(chain, info)) return false; @@ -328,3 +276,65 @@ bool renderchain_init(void *data, return true; } + +void renderchain_set_final_viewport(void *data, + void *renderchain_data, const void *viewport_data) +{ + (void)data; + (void)renderchain_data; + (void)viewport_data; +} + +void renderchain_render_pass(void *data, const void *frame, + unsigned width, unsigned height, unsigned pitch, unsigned rotation) +{ + unsigned i; + d3d_video_t *d3d = (d3d_video_t*)data; + LPDIRECT3DDEVICE d3dr = (LPDIRECT3DDEVICE)d3d->dev; + runloop_t *runloop = rarch_main_get_ptr(); + settings_t *settings = config_get_ptr(); + + renderchain_blit_to_texture(d3d, frame, width, height, pitch); + renderchain_set_vertices(d3d, 1, width, height); + + d3d_set_texture(d3dr, 0, d3d->tex); + d3d_set_viewport(d3d->dev, &d3d->final_viewport); + d3d_set_sampler_minfilter(d3dr, 0, settings->video.smooth ? + D3DTEXF_LINEAR : D3DTEXF_POINT); + d3d_set_sampler_magfilter(d3dr, 0, settings->video.smooth ? + D3DTEXF_LINEAR : D3DTEXF_POINT); + +#if defined(_XBOX1) + d3d_set_vertex_shader(d3dr, D3DFVF_XYZ | D3DFVF_TEX1, NULL); +#elif defined(_XBOX360) + D3DDevice_SetVertexDeclaration(d3dr, d3d->vertex_decl); +#endif + for (i = 0; i < 4; i++) + d3d_set_stream_source(d3dr, i, d3d->vertex_buf, 0, sizeof(Vertex)); + + d3d_draw_primitive(d3dr, D3DPT_TRIANGLESTRIP, 0, 2); + renderchain_set_mvp(d3d, d3d->screen_width, d3d->screen_height, d3d->dev_rotation); +} + +bool renderchain_init_shader_fvf(void *data, void *pass_data) +{ + d3d_video_t *chain = (d3d_video_t*)data; + d3d_video_t *pass = (d3d_video_t*)data; + LPDIRECT3DDEVICE d3dr = (LPDIRECT3DDEVICE)chain->dev; + + (void)pass_data; + +#if defined(_XBOX360) + static const D3DVERTEXELEMENT VertexElements[] = + { + { 0, 0 * sizeof(float), D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 }, + { 0, 2 * sizeof(float), D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 }, + D3DDECL_END() + }; + + if (FAILED(d3dr->CreateVertexDeclaration(VertexElements, &pass->vertex_decl))) + return false; +#endif + + return true; +}