diff --git a/gfx/context/xdk_ctx.c b/gfx/context/xdk_ctx.c index 1758d6ba77..1ac99d8193 100644 --- a/gfx/context/xdk_ctx.c +++ b/gfx/context/xdk_ctx.c @@ -34,6 +34,84 @@ #define XBOX_PRESENTATIONINTERVAL D3DRS_PRESENTINTERVAL #endif +void xdk_d3d_generate_pp(D3DPRESENT_PARAMETERS *d3dpp, const video_info_t *video) +{ + xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)driver.video_data; + + memset(d3dpp, 0, sizeof(*d3dpp)); + + d3d->texture_fmt = video->rgb32 ? D3DFMT_X8R8G8B8 : D3DFMT_LIN_R5G6B5; + d3d->base_size = video->rgb32 ? sizeof(uint32_t) : sizeof(uint16_t); + + unsigned width, height; + width = 0; + height = 0; + + if (d3d->ctx_driver) + d3d->ctx_driver->get_video_size(&width, &height); + + d3dpp->BackBufferWidth = d3d->win_width = width; + d3dpp->BackBufferHeight = d3d->win_height = height; + +#if defined(_XBOX1) + // Get the "video mode" + DWORD video_mode = XGetVideoFlags(); + + // Check if we are able to use progressive mode + if (video_mode & XC_VIDEO_FLAGS_HDTV_480p) + d3dpp->Flags = D3DPRESENTFLAG_PROGRESSIVE; + else + d3dpp->Flags = D3DPRESENTFLAG_INTERLACED; + + // Only valid in PAL mode, not valid for HDTV modes! + if (XGetVideoStandard() == XC_VIDEO_STANDARD_PAL_I) + { + if (video_mode & XC_VIDEO_FLAGS_PAL_60Hz) + d3dpp->FullScreen_RefreshRateInHz = 60; + else + d3dpp->FullScreen_RefreshRateInHz = 50; + } + + if (XGetAVPack() == XC_AV_PACK_HDTV) + { + if (video_mode & XC_VIDEO_FLAGS_HDTV_480p) + d3dpp->Flags = D3DPRESENTFLAG_PROGRESSIVE; + else if (video_mode & XC_VIDEO_FLAGS_HDTV_720p) + d3dpp->Flags = D3DPRESENTFLAG_PROGRESSIVE; + else if (video_mode & XC_VIDEO_FLAGS_HDTV_1080i) + d3dpp->Flags = D3DPRESENTFLAG_INTERLACED; + } + + if (g_extern.lifecycle_state & MODE_MENU_WIDESCREEN) + d3dpp->Flags |= D3DPRESENTFLAG_WIDESCREEN; + + d3dpp->BackBufferFormat = D3DFMT_X8R8G8B8; + d3dpp->FullScreen_PresentationInterval = d3d->vsync ? D3DPRESENT_INTERVAL_ONE : D3DPRESENT_INTERVAL_IMMEDIATE; + d3dpp->SwapEffect = D3DSWAPEFFECT_COPY; +#elif defined(_XBOX360) + if (!(g_extern.lifecycle_state & (1ULL << MODE_MENU_WIDESCREEN))) + d3dpp->Flags |= D3DPRESENTFLAG_NO_LETTERBOX; + + if (g_extern.console.screen.gamma_correction) + { + d3dpp->BackBufferFormat = (D3DFORMAT)MAKESRGBFMT(d3d->texture_fmt); + d3dpp->FrontBufferFormat = (D3DFORMAT)MAKESRGBFMT(D3DFMT_LE_X8R8G8B8); + } + else + { + d3dpp->BackBufferFormat = d3d->texture_fmt; + d3dpp->FrontBufferFormat = D3DFMT_LE_X8R8G8B8; + } + d3dpp->MultiSampleQuality = 0; + d3dpp->PresentationInterval = d3d->vsync ? D3DPRESENT_INTERVAL_ONE : D3DPRESENT_INTERVAL_IMMEDIATE; + d3dpp->SwapEffect = D3DSWAPEFFECT_DISCARD; +#endif + d3dpp->BackBufferCount = 2; + d3dpp->MultiSampleType = D3DMULTISAMPLE_NONE; + d3dpp->EnableAutoDepthStencil = FALSE; +} + + static void gfx_ctx_xdk_set_swap_interval(unsigned interval) { #ifdef _XBOX diff --git a/xdk/xdk_d3d.cpp b/xdk/xdk_d3d.cpp index 5f43801851..1e8d3f80d5 100644 --- a/xdk/xdk_d3d.cpp +++ b/xdk/xdk_d3d.cpp @@ -371,83 +371,6 @@ static bool xdk_d3d_set_shader(void *data, enum rarch_shader_type type, const ch return true; } -void xdk_d3d_generate_pp(D3DPRESENT_PARAMETERS *d3dpp, const video_info_t *video) -{ - xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)driver.video_data; - - memset(d3dpp, 0, sizeof(*d3dpp)); - - d3d->texture_fmt = video->rgb32 ? D3DFMT_X8R8G8B8 : D3DFMT_LIN_R5G6B5; - d3d->base_size = video->rgb32 ? sizeof(uint32_t) : sizeof(uint16_t); - - unsigned width, height; - width = 0; - height = 0; - - if (d3d->ctx_driver) - d3d->ctx_driver->get_video_size(&width, &height); - - d3dpp->BackBufferWidth = d3d->win_width = width; - d3dpp->BackBufferHeight = d3d->win_height = height; - -#if defined(_XBOX1) - // Get the "video mode" - DWORD video_mode = XGetVideoFlags(); - - // Check if we are able to use progressive mode - if (video_mode & XC_VIDEO_FLAGS_HDTV_480p) - d3dpp->Flags = D3DPRESENTFLAG_PROGRESSIVE; - else - d3dpp->Flags = D3DPRESENTFLAG_INTERLACED; - - // Only valid in PAL mode, not valid for HDTV modes! - if (XGetVideoStandard() == XC_VIDEO_STANDARD_PAL_I) - { - if (video_mode & XC_VIDEO_FLAGS_PAL_60Hz) - d3dpp->FullScreen_RefreshRateInHz = 60; - else - d3dpp->FullScreen_RefreshRateInHz = 50; - } - - if (XGetAVPack() == XC_AV_PACK_HDTV) - { - if (video_mode & XC_VIDEO_FLAGS_HDTV_480p) - d3dpp->Flags = D3DPRESENTFLAG_PROGRESSIVE; - else if (video_mode & XC_VIDEO_FLAGS_HDTV_720p) - d3dpp->Flags = D3DPRESENTFLAG_PROGRESSIVE; - else if (video_mode & XC_VIDEO_FLAGS_HDTV_1080i) - d3dpp->Flags = D3DPRESENTFLAG_INTERLACED; - } - - if (g_extern.lifecycle_state & MODE_MENU_WIDESCREEN) - d3dpp->Flags |= D3DPRESENTFLAG_WIDESCREEN; - - d3dpp->BackBufferFormat = D3DFMT_X8R8G8B8; - d3dpp->FullScreen_PresentationInterval = d3d->vsync ? D3DPRESENT_INTERVAL_ONE : D3DPRESENT_INTERVAL_IMMEDIATE; - d3dpp->SwapEffect = D3DSWAPEFFECT_COPY; -#elif defined(_XBOX360) - if (!(g_extern.lifecycle_state & (1ULL << MODE_MENU_WIDESCREEN))) - d3dpp->Flags |= D3DPRESENTFLAG_NO_LETTERBOX; - - if (g_extern.console.screen.gamma_correction) - { - d3dpp->BackBufferFormat = (D3DFORMAT)MAKESRGBFMT(d3d->texture_fmt); - d3dpp->FrontBufferFormat = (D3DFORMAT)MAKESRGBFMT(D3DFMT_LE_X8R8G8B8); - } - else - { - d3dpp->BackBufferFormat = d3d->texture_fmt; - d3dpp->FrontBufferFormat = D3DFMT_LE_X8R8G8B8; - } - d3dpp->MultiSampleQuality = 0; - d3dpp->PresentationInterval = d3d->vsync ? D3DPRESENT_INTERVAL_ONE : D3DPRESENT_INTERVAL_IMMEDIATE; - d3dpp->SwapEffect = D3DSWAPEFFECT_DISCARD; -#endif - d3dpp->BackBufferCount = 2; - d3dpp->MultiSampleType = D3DMULTISAMPLE_NONE; - d3dpp->EnableAutoDepthStencil = FALSE; -} - static void xdk_d3d_init_textures(void *data, const video_info_t *video) { HRESULT ret;