(XDK D3D) refactors

This commit is contained in:
twinaphex 2014-03-05 22:10:36 +01:00
parent 441aae95bf
commit fb48a9e356
4 changed files with 36 additions and 24 deletions

View File

@ -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)
{

View File

@ -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"

View File

@ -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);
}

View File

@ -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