static bool d3d_initialize(void *data, const video_info_t *info) { d3d_video_t *d3d = (d3d_video_t*)data; bool ret = true; if (!d3d->g_pD3D) ret = d3d_init_base(d3d, info); else if (d3d->needs_restore) { D3DPRESENT_PARAMETERS d3dpp; d3d_make_d3dpp(d3d, info, &d3dpp); if (d3d->dev->Reset(&d3dpp) != D3D_OK) { // Try to recreate the device completely .. #ifndef _XBOX HRESULT res = d3d->dev->TestCooperativeLevel(); const char *err; switch (res) { case D3DERR_DEVICELOST: err = "DEVICELOST"; break; case D3DERR_DEVICENOTRESET: err = "DEVICENOTRESET"; break; case D3DERR_DRIVERINTERNALERROR: err = "DRIVERINTERNALERROR"; break; default: err = "Unknown"; }.
static bool d3d_init_base(void *data, const video_info_t *info) { d3d_video_t *d3d = (d3d_video_t*)data; D3DPRESENT_PARAMETERS d3dpp; d3d_make_d3dpp(d3d, info, &d3dpp); d3d->g_pD3D = direct3d_create_ctx(D3D_SDK_VERSION); if (!d3d->g_pD3D) { RARCH_ERR("Failed to create D3D interface.\n"); return false; } if (d3d->d3d_err = d3d->g_pD3D->CreateDevice(0, D3DDEVTYPE_HAL, NULL, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &d3d->dev) != S_OK) { RARCH_ERR("[D3D]: Failed to initialize device.\n"); return false; } return true; }
static bool d3d_initialize(d3d_video_t *d3d, const video_info_t *info) { unsigned width, height; bool ret = true; settings_t *settings = config_get_ptr(); if (!d3d) return false; if (!g_pD3D) ret = d3d_init_base(d3d, info); else if (d3d->needs_restore) { D3DPRESENT_PARAMETERS d3dpp; d3d_make_d3dpp(d3d, info, &d3dpp); if (!d3d_reset(d3d->dev, &d3dpp)) { d3d_deinitialize(d3d); d3d_device_free(NULL, g_pD3D); g_pD3D = NULL; ret = d3d_init_base(d3d, info); if (ret) RARCH_LOG("[D3D]: Recovered from dead state.\n"); } } if (!ret) return ret; if (!d3d_init_chain(d3d, info)) { RARCH_ERR("Failed to initialize render chain.\n"); return false; } video_driver_get_size(&width, &height); d3d_set_viewport(d3d, width, height, false, true); #if defined(_XBOX360) strlcpy(settings->path.font, "game:\\media\\Arial_12.xpr", sizeof(settings->path.font)); #endif if (!font_driver_init_first(NULL, NULL, d3d, settings->path.font, 0, false, FONT_DRIVER_RENDER_DIRECT3D_API)) { RARCH_ERR("[D3D]: Failed to initialize font renderer.\n"); return false; } return true; }
static bool d3d_init_base(void *data, const video_info_t *info) { D3DPRESENT_PARAMETERS d3dpp; d3d_video_t *d3d = (d3d_video_t*)data; d3d_make_d3dpp(d3d, info, &d3dpp); g_pD3D = D3DCREATE_CTX(D3D_SDK_VERSION); if (!g_pD3D) { RARCH_ERR("Failed to create D3D interface.\n"); return false; } #ifdef _XBOX360 d3d->cur_mon_id = 0; #endif if (FAILED(d3d->d3d_err = g_pD3D->CreateDevice( d3d->cur_mon_id, D3DDEVTYPE_HAL, win32_get_window(), D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &d3d->dev))) { RARCH_WARN("[D3D]: Failed to init device with hardware vertex processing (code: 0x%x). Trying to fall back to software vertex processing.\n", (unsigned)d3d->d3d_err); if (FAILED(d3d->d3d_err = g_pD3D->CreateDevice( d3d->cur_mon_id, D3DDEVTYPE_HAL, win32_get_window(), D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &d3d->dev))) { RARCH_ERR("Failed to initialize device.\n"); return false; } } return true; }
static bool d3d_initialize(void *data, const video_info_t *info) { d3d_video_t *d3d = (d3d_video_t*)data; bool ret = true; if (!d3d->g_pD3D) ret = d3d_init_base(d3d, info); else if (d3d->needs_restore) { D3DPRESENT_PARAMETERS d3dpp; d3d_make_d3dpp(d3d, info, &d3dpp); if (d3d->dev->Reset(&d3dpp) != D3D_OK) { HRESULT res = d3d->dev->TestCooperativeLevel(); const char *err; switch (res) { case D3DERR_DEVICELOST: err = "DEVICELOST"; break; case D3DERR_DEVICENOTRESET: err = "DEVICENOTRESET"; break; case D3DERR_DRIVERINTERNALERROR: err = "DRIVERINTERNALERROR"; break; default: err = "Unknown"; } // Try to recreate the device completely ... RARCH_WARN("[D3D]: Attempting to recover from dead state (%s).\n", err); d3d_deinitialize(d3d); d3d->g_pD3D->Release(); d3d->g_pD3D = NULL; ret = d3d_init_base(d3d, info); if (ret) RARCH_LOG("[D3D]: Recovered from dead state.\n"); else return ret; } } if (!ret) return ret; d3d_calculate_rect(d3d, d3d->screen_width, d3d->screen_height, info->force_aspect, g_extern.system.aspect_ratio); #ifdef HAVE_SHADERS if (!d3d_init_shader(d3d)) { RARCH_ERR("Failed to initialize shader subsystem.\n"); return false; } #endif if (!d3d_init_chain(d3d, info)) { RARCH_ERR("Failed to initialize render chain.\n"); return false; } #if defined(_XBOX360) strlcpy(g_settings.video.font_path, "game:\\media\\Arial_12.xpr", sizeof(g_settings.video.font_path)); #endif d3d->font_ctx = d3d_font_init_first(d3d, g_settings.video.font_path, g_settings.video.font_size); if (!d3d->font_ctx) { RARCH_ERR("Failed to initialize font.\n"); return false; } return true; }
static void* rmenu_xui_init(void) { HRESULT hr; TypefaceDescriptor typeface = {0}; menu_handle_t *menu = (menu_handle_t*)calloc(1, sizeof(*menu)); if (!menu) return NULL; d3d_video_t *d3d= (d3d_video_t*)driver.video_data; bool hdmenus_allowed = (g_extern.lifecycle_state & (1ULL << MODE_MENU_HD)); if (hdmenus_allowed) RARCH_LOG("HD menus enabled.\n"); D3DPRESENT_PARAMETERS d3dpp; video_info_t video_info = {0}; video_info.vsync = g_settings.video.vsync; video_info.force_aspect = false; video_info.smooth = g_settings.video.smooth; video_info.input_scale = 2; video_info.fullscreen = true; video_info.rgb32 = false; d3d_make_d3dpp(d3d, &video_info, &d3dpp); hr = app.InitShared(d3d->dev, &d3dpp, XuiPNGTextureLoader); if (FAILED(hr)) { RARCH_ERR("Failed initializing XUI application.\n"); goto error; } /* Register font */ typeface.szTypeface = L"Arial Unicode MS"; typeface.szLocator = L"file://game:/media/rarch.ttf"; typeface.szReserved1 = NULL; hr = XuiRegisterTypeface( &typeface, TRUE ); if (FAILED(hr)) { RARCH_ERR("Failed to register default typeface.\n"); goto error; } hr = XuiLoadVisualFromBinary( L"file://game:/media/rarch_scene_skin.xur", NULL); if (FAILED(hr)) { RARCH_ERR("Failed to load skin.\n"); goto error; } hr = XuiSceneCreate(hdmenus_allowed ? L"file://game:/media/hd/" : L"file://game:/media/sd/", L"rarch_main.xur", NULL, &root_menu); if (FAILED(hr)) { RARCH_ERR("Failed to create scene 'rarch_main.xur'.\n"); goto error; } current_menu = root_menu; hr = XuiSceneNavigateFirst(app.GetRootObj(), current_menu, XUSER_INDEX_FOCUS); if (FAILED(hr)) { RARCH_ERR("XuiSceneNavigateFirst failed.\n"); goto error; } if (driver.video_data && driver.video_poke && driver.video_poke->set_texture_enable) driver.video_poke->set_texture_frame(driver.video_data, NULL, true, 0, 0, 1.0f); xui_msg_queue = msg_queue_new(16); return menu; error: free(menu); return NULL; }
static bool d3d_initialize(d3d_video_t *d3d, const video_info_t *info) { bool ret = true; settings_t *settings = config_get_ptr(); global_t *global = global_get_ptr(); if (!d3d) return false; if (!d3d->g_pD3D) ret = d3d_init_base(d3d, info); else if (d3d->needs_restore) { D3DPRESENT_PARAMETERS d3dpp; d3d_make_d3dpp(d3d, info, &d3dpp); if (d3d->dev->Reset(&d3dpp) != D3D_OK) { /* Try to recreate the device completely. */ #ifndef _XBOX HRESULT res = d3d->dev->TestCooperativeLevel(); const char *err; switch (res) { case D3DERR_DEVICELOST: err = "DEVICELOST"; break; case D3DERR_DEVICENOTRESET: err = "DEVICENOTRESET"; break; case D3DERR_DRIVERINTERNALERROR: err = "DRIVERINTERNALERROR"; break; default: err = "Unknown"; } RARCH_WARN( "[D3D]: Attempting to recover from dead state (%s).\n", err); #else RARCH_WARN("[D3D]: Attempting to recover from dead state.\n"); #endif d3d_deinitialize(d3d); d3d->g_pD3D->Release(); d3d->g_pD3D = NULL; ret = d3d_init_base(d3d, info); if (ret) RARCH_LOG("[D3D]: Recovered from dead state.\n"); } } if (!ret) return ret; d3d_calculate_rect(d3d, d3d->screen_width, d3d->screen_height, info->force_aspect, global->system.aspect_ratio); if (!d3d_init_chain(d3d, info)) { RARCH_ERR("Failed to initialize render chain.\n"); return false; } #if defined(_XBOX360) strlcpy(settings->video.font_path, "game:\\media\\Arial_12.xpr", sizeof(settings->video.font_path)); #endif if (!d3d_font_init_first(&d3d->font_driver, &d3d->font_handle, d3d, settings->video.font_path, 0)) { RARCH_ERR("[D3D]: Failed to initialize font renderer.\n"); return false; } return true; }
static void* rmenu_xui_init(void) { HRESULT hr; d3d_video_t *d3d = NULL; D3DPRESENT_PARAMETERS d3dpp = {0}; video_info_t video_info = {0}; TypefaceDescriptor typeface = {0}; settings_t *settings = config_get_ptr(); driver_t *driver = driver_get_ptr(); menu_handle_t *menu = (menu_handle_t*) calloc(1, sizeof(*menu)); if (!menu) return NULL; d3d= (d3d_video_t*)driver->video_data; if (d3d->resolution_hd_enable) RARCH_LOG("HD menus enabled.\n"); video_info.vsync = settings->video.vsync; video_info.force_aspect = false; video_info.smooth = settings->video.smooth; video_info.input_scale = 2; video_info.fullscreen = true; video_info.rgb32 = false; d3d_make_d3dpp(d3d, &video_info, &d3dpp); hr = app.InitShared(d3d->dev, &d3dpp, (PFN_XUITEXTURELOADER)XuiTextureLoader); if (FAILED(hr)) { RARCH_ERR("Failed initializing XUI application.\n"); goto error; } /* Register font */ typeface.szTypeface = L"Arial Unicode MS"; typeface.szLocator = L"file://game:/media/rarch.ttf"; typeface.szReserved1 = NULL; hr = XuiRegisterTypeface( &typeface, TRUE ); if (FAILED(hr)) { RARCH_ERR("Failed to register default typeface.\n"); goto error; } hr = XuiLoadVisualFromBinary( L"file://game:/media/rarch_scene_skin.xur", NULL); if (FAILED(hr)) { RARCH_ERR("Failed to load skin.\n"); goto error; } hr = XuiSceneCreate(d3d->resolution_hd_enable ? L"file://game:/media/hd/" : L"file://game:/media/sd/", L"rarch_main.xur", NULL, &root_menu); if (FAILED(hr)) { RARCH_ERR("Failed to create scene 'rarch_main.xur'.\n"); goto error; } current_menu = root_menu; hr = XuiSceneNavigateFirst(app.GetRootObj(), current_menu, XUSER_INDEX_FOCUS); if (FAILED(hr)) { RARCH_ERR("XuiSceneNavigateFirst failed.\n"); goto error; } video_driver_set_texture_frame(NULL, true, 0, 0, 1.0f); xui_msg_queue = msg_queue_new(16); return menu; error: free(menu); return NULL; }