diff --git a/gfx/common/d3d_common.c b/gfx/common/d3d_common.c index cc19c092c0..cc512f7c42 100644 --- a/gfx/common/d3d_common.c +++ b/gfx/common/d3d_common.c @@ -263,6 +263,25 @@ void d3d_deinitialize_symbols(void) #endif } +bool d3d_get_adapter_display_mode(LPDIRECT3D d3d, + unsigned idx, + D3DDISPLAYMODE *display_mode) +{ + if (!display_mode || !d3d) + return false; +#if defined(HAVE_D3D9) && !defined(__cplusplus) + if (FAILED(IDirect3D9_GetAdapterDisplayMode(d3d, idx, display_mode))) + return false; +#elif defined(HAVE_D3D8) && !defined(__cplusplus) + if (FAILED(IDirect3D8_GetAdapterDisplayMode(d3d, idx, display_mode))) + return false; +#else + if (FAILED(d3d->GetAdapterDisplayMode(idx, display_mode))) + return false; +#endif + return true; +} + bool d3d_swap(void *data, LPDIRECT3DDEVICE dev) { #if defined(_XBOX1) diff --git a/gfx/common/d3d_common.h b/gfx/common/d3d_common.h index ee623c8561..280ff418a6 100644 --- a/gfx/common/d3d_common.h +++ b/gfx/common/d3d_common.h @@ -159,6 +159,10 @@ void * d3d_matrix_identity(void *_pout); void *d3d_matrix_rotation_z(void *_pout, float angle); +bool d3d_get_adapter_display_mode(LPDIRECT3D d3d, + unsigned idx, + D3DDISPLAYMODE *display_mode); + bool d3d_create_device(LPDIRECT3DDEVICE *dev, D3DPRESENT_PARAMETERS *d3dpp, LPDIRECT3D d3d, diff --git a/gfx/drivers/d3d.c b/gfx/drivers/d3d.c index 8a5b211281..e7b5c3b845 100644 --- a/gfx/drivers/d3d.c +++ b/gfx/drivers/d3d.c @@ -509,7 +509,13 @@ static D3DFORMAT d3d_get_color_format_backbuffer(bool rgb32, bool windowed) else fmt = D3DFMT_LIN_R5G6B5; #else - if (!windowed) + if (windowed) + { + D3DDISPLAYMODE display_mode; + if (d3d_get_adapter_display_mode(g_pD3D, 0, &display_mode)) + fmt = display_mode.Format; + } + else fmt = D3DFMT_X8R8G8B8; #endif return fmt;