From fb48a9e3567cd31f6ef5070a1da2c537d45f7f4b Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 5 Mar 2014 22:10:36 +0100 Subject: [PATCH] (XDK D3D) refactors --- frontend/menu/disp/rmenu_xui.cpp | 6 ++--- gfx/context/xdk_ctx.c | 12 +++++----- xdk/xdk_d3d.cpp | 40 +++++++++++++++++++++----------- xdk/xdk_d3d.h | 2 +- 4 files changed, 36 insertions(+), 24 deletions(-) diff --git a/frontend/menu/disp/rmenu_xui.cpp b/frontend/menu/disp/rmenu_xui.cpp index eeab16fb4b..e5740cbb5d 100644 --- a/frontend/menu/disp/rmenu_xui.cpp +++ b/frontend/menu/disp/rmenu_xui.cpp @@ -159,7 +159,7 @@ static void* rmenu_xui_init (void) return NULL; } - xdk_d3d_video_t *device_ptr = (xdk_d3d_video_t*)driver.video_data; + xdk_d3d_video_t *d3d= (xdk_d3d_video_t*)driver.video_data; bool hdmenus_allowed = (g_extern.lifecycle_state & (1ULL << MODE_MENU_HD)); @@ -176,9 +176,9 @@ static void* rmenu_xui_init (void) video_info.fullscreen = true; video_info.rgb32 = false; - xdk_d3d_generate_pp(&d3dpp, &video_info); + d3d_make_d3dpp(d3d, &video_info, &d3dpp); - hr = app.InitShared(device_ptr->dev, &d3dpp, XuiPNGTextureLoader); + hr = app.InitShared(d3d->dev, &d3dpp, XuiPNGTextureLoader); if (hr != S_OK) { diff --git a/gfx/context/xdk_ctx.c b/gfx/context/xdk_ctx.c index cecc1eae88..7208200359 100644 --- a/gfx/context/xdk_ctx.c +++ b/gfx/context/xdk_ctx.c @@ -36,19 +36,19 @@ #define XBOX_PRESENTATIONINTERVAL D3DRS_PRESENTINTERVAL #endif -void xdk_d3d_generate_pp(D3DPRESENT_PARAMETERS *d3dpp, const video_info_t *video) +void d3d_make_d3dpp(void *data, const video_info_t *info, D3DPRESENT_PARAMETERS *d3dpp) { - xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)driver.video_data; + xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)data; memset(d3dpp, 0, sizeof(*d3dpp)); #ifdef _XBOX d3dpp->Windowed = false; #else - d3dpp->Windowed = g_settings.video.windowed_fullscreen || !video->fullscreen; + d3dpp->Windowed = g_settings.video.windowed_fullscreen || !info->fullscreen; #endif - if (video->vsync) + if (info->vsync) { switch (g_settings.video.swap_interval) { @@ -92,8 +92,8 @@ void xdk_d3d_generate_pp(D3DPRESENT_PARAMETERS *d3dpp, const video_info_t *video d3dpp->MultiSampleType = D3DMULTISAMPLE_NONE; d3dpp->EnableAutoDepthStencil = FALSE; - d3d->texture_fmt = video->rgb32 ? D3DFMT_X8R8G8B8 : D3DFMT_LIN_R5G6B5; - d3d->base_size = video->rgb32 ? sizeof(uint32_t) : sizeof(uint16_t); + d3d->texture_fmt = info->rgb32 ? D3DFMT_X8R8G8B8 : D3DFMT_LIN_R5G6B5; + d3d->base_size = info->rgb32 ? sizeof(uint32_t) : sizeof(uint16_t); #if defined(_XBOX1) // Get the "video mode" diff --git a/xdk/xdk_d3d.cpp b/xdk/xdk_d3d.cpp index d70e7419b7..b418dd30ba 100644 --- a/xdk/xdk_d3d.cpp +++ b/xdk/xdk_d3d.cpp @@ -294,7 +294,7 @@ static void xdk_d3d_init_textures(void *data, const video_info_t *video) D3DPRESENT_PARAMETERS d3dpp; D3DVIEWPORT vp = {0}; - xdk_d3d_generate_pp(&d3dpp, video); + d3d_make_d3dpp(d3d, video, &d3dpp); d3d->texture_fmt = video->rgb32 ? D3DFMT_LIN_X8R8G8B8 : D3DFMT_LIN_R5G6B5; d3d->base_size = video->rgb32 ? sizeof(uint32_t) : sizeof(uint16_t); @@ -368,6 +368,22 @@ static void xdk_d3d_reinit_textures(void *data, const video_info_t *video) } } +static const gfx_ctx_driver_t *d3d_get_context(void *data) +{ + xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)data; + enum gfx_ctx_api api; + unsigned major, minor; +#if defined(_XBOX1) + api = GFX_CTX_DIRECT3D8_API; + major = 8; +#elif defined(_XBOX360) + api = GFX_CTX_DIRECT3D9_API; + major = 9; +#endif + minor = 0; + return d3d->ctx_driver = gfx_ctx_init_first(api, major, minor); +} + static void *xdk_d3d_init(const video_info_t *video, const input_driver_t **input, void **input_data) { HRESULT ret; @@ -392,15 +408,16 @@ static void *xdk_d3d_init(const video_info_t *video, const input_driver_t **inpu d3d->tex_w = RARCH_SCALE_BASE * video->input_scale; d3d->tex_h = RARCH_SCALE_BASE * video->input_scale; -#if defined(_XBOX1) - d3d->ctx_driver = gfx_ctx_init_first(GFX_CTX_DIRECT3D8_API, 8, 0); -#elif defined(_XBOX360) - d3d->ctx_driver = gfx_ctx_init_first(GFX_CTX_DIRECT3D9_API, 9, 0); -#endif - if (d3d->ctx_driver) + d3d->ctx_driver = d3d_get_context(d3d); + if (!d3d->ctx_driver) + { + free(d3d); + return NULL; + } + { D3DPRESENT_PARAMETERS d3dpp; - xdk_d3d_generate_pp(&d3dpp, video); + d3d_make_d3dpp(d3d, video, &d3dpp); ret = d3d->g_pD3D->CreateDevice(0, D3DDEVTYPE_HAL, NULL, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &d3d->dev); @@ -412,11 +429,6 @@ static void *xdk_d3d_init(const video_info_t *video, const input_driver_t **inpu } RD3DDevice_Clear(d3d->dev, 0, NULL, D3DCLEAR_TARGET, 0xff000000, 1.0f, 0); } - else - { - free(d3d); - return NULL; - } RARCH_LOG("Found D3D context: %s\n", d3d->ctx_driver->ident); @@ -947,7 +959,7 @@ static void xdk_d3d_restart(void) video_info.input_scale = 2; video_info.fullscreen = true; video_info.rgb32 = (d3d->base_size == sizeof(uint32_t)) ? true : false; - xdk_d3d_generate_pp(&d3dpp, &video_info); + d3d_make_d3dpp(d3d, &video_info, &d3dpp); d3dr->Reset(&d3dpp); } diff --git a/xdk/xdk_d3d.h b/xdk/xdk_d3d.h index 2f00a845be..88cc664036 100644 --- a/xdk/xdk_d3d.h +++ b/xdk/xdk_d3d.h @@ -79,7 +79,7 @@ typedef struct xdk_d3d_video video_info_t video_info; } xdk_d3d_video_t; -extern void xdk_d3d_generate_pp(D3DPRESENT_PARAMETERS *d3dpp, const video_info_t *video); +extern void d3d_make_d3dpp(void *data, const video_info_t *info, D3DPRESENT_PARAMETERS *d3dpp); extern bool texture_image_render(struct texture_image *out_img); #endif