From 6195711bb33bfcdc6571b876204bc31a0d59be8f Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 19 Apr 2022 14:49:08 +0200 Subject: [PATCH] (D3D9) Move functions to d3d9.c --- gfx/common/d3d9_common.c | 77 ----------- gfx/common/d3d9_common.h | 8 -- gfx/drivers/d3d9.c | 283 +++++++++++++++++++++++++-------------- 3 files changed, 182 insertions(+), 186 deletions(-) diff --git a/gfx/common/d3d9_common.c b/gfx/common/d3d9_common.c index 18d03f601b..8265835acd 100644 --- a/gfx/common/d3d9_common.c +++ b/gfx/common/d3d9_common.c @@ -833,19 +833,6 @@ void d3d9_log_info(const struct LinkInfo *info) info->pass->filter == RARCH_FILTER_LINEAR ? "true" : "false"); } -static void d3d9_set_resize(d3d9_video_t *d3d, - unsigned new_width, unsigned new_height) -{ - /* No changes? */ - if ( (new_width == d3d->video_info.width) - && (new_height == d3d->video_info.height)) - return; - - d3d->video_info.width = new_width; - d3d->video_info.height = new_height; - video_driver_set_size(new_width, new_height); -} - static void d3d9_init_singlepass(d3d9_video_t *d3d) { struct video_shader_pass *pass = NULL; @@ -1133,70 +1120,6 @@ void d3d9_free_overlay(d3d9_video_t *d3d, overlay_t *overlay) } #endif -void d3d9_set_nonblock_state(void *data, bool state, - bool adaptive_vsync_enabled, - unsigned swap_interval) -{ -#ifdef _XBOX - int interval = 0; -#endif - d3d9_video_t *d3d = (d3d9_video_t*)data; - - if (!d3d) - return; - -#ifdef _XBOX - if (!state) - interval = 1; -#endif - - d3d->video_info.vsync = !state; - -#ifdef _XBOX - d3d9_set_render_state(d3d->dev, - D3DRS_PRESENTINTERVAL, - interval ? - D3DPRESENT_INTERVAL_ONE : D3DPRESENT_INTERVAL_IMMEDIATE - ); -#else - d3d->needs_restore = true; - d3d9_restore(d3d); -#endif -} - -bool d3d9_alive(void *data) -{ - unsigned temp_width = 0; - unsigned temp_height = 0; - bool ret = false; - bool quit = false; - bool resize = false; - d3d9_video_t *d3d = (d3d9_video_t*)data; - - /* Needed because some context drivers don't track their sizes */ - video_driver_get_size(&temp_width, &temp_height); - - win32_check_window(NULL, &quit, &resize, &temp_width, &temp_height); - - if (quit) - d3d->quitting = quit; - - if (resize) - { - d3d->should_resize = true; - d3d9_set_resize(d3d, temp_width, temp_height); - d3d9_restore(d3d); - } - - ret = !quit; - - if ( temp_width != 0 && - temp_height != 0) - video_driver_set_size(temp_width, temp_height); - - return ret; -} - bool d3d9_suppress_screensaver(void *data, bool enable) { #ifdef _XBOX diff --git a/gfx/common/d3d9_common.h b/gfx/common/d3d9_common.h index 9bf3f23d06..76619f4515 100644 --- a/gfx/common/d3d9_common.h +++ b/gfx/common/d3d9_common.h @@ -781,12 +781,6 @@ void d3d9_get_overlay_interface(void *data, const video_overlay_interface_t **iface); #endif -void d3d9_set_nonblock_state(void *data, bool state, - bool adaptive_vsync_enabled, - unsigned swap_interval); - -bool d3d9_alive(void *data); - void d3d9_set_rotation(void *data, unsigned rot); void d3d9_viewport_info(void *data, struct video_viewport *vp); @@ -829,8 +823,6 @@ void d3d9_set_menu_texture_enable(void *data, void d3d9_apply_state_changes(void *data); -bool d3d9_restore(d3d9_video_t *d3d); - extern LPDIRECT3D9 g_pD3D9; RETRO_END_DECLS diff --git a/gfx/drivers/d3d9.c b/gfx/drivers/d3d9.c index 904ef54a81..52dac50982 100644 --- a/gfx/drivers/d3d9.c +++ b/gfx/drivers/d3d9.c @@ -92,53 +92,6 @@ static uint32_t d3d9_get_flags(void *data) return flags; } -static bool d3d9_set_shader(void *data, - enum rarch_shader_type type, const char *path) -{ -#if defined(HAVE_CG) || defined(HAVE_HLSL) - d3d9_video_t *d3d = (d3d9_video_t*)data; - - if (!d3d) - return false; - - if (!string_is_empty(d3d->shader_path)) - free(d3d->shader_path); - d3d->shader_path = NULL; - - switch (type) - { - case RARCH_SHADER_CG: - case RARCH_SHADER_HLSL: - - if (type != supported_shader_type) - { - RARCH_WARN("[D3D9]: Shader preset %s is using unsupported shader type %s, falling back to stock %s.\n", - path, video_shader_type_to_str(type), video_shader_type_to_str(supported_shader_type)); - break; - } - - if (!string_is_empty(path)) - d3d->shader_path = strdup(path); - - break; - case RARCH_SHADER_NONE: - break; - default: - RARCH_WARN("[D3D9]: Only Cg shaders are supported. Falling back to stock.\n"); - } - - if (!d3d9_process_shader(d3d) || !d3d9_restore(d3d)) - { - RARCH_ERR("[D3D9]: Failed to set shader.\n"); - return false; - } - - return true; -#else - return false; -#endif -} - static void d3d9_deinit_chain(d3d9_video_t *d3d) { if (!d3d || !d3d->renderchain_driver) @@ -151,6 +104,46 @@ static void d3d9_deinit_chain(d3d9_video_t *d3d) d3d->renderchain_data = NULL; } +static void d3d9_deinitialize(d3d9_video_t *d3d) +{ + if (!d3d) + return; + + font_driver_free_osd(); + + d3d9_deinit_chain(d3d); + d3d9_vertex_buffer_free(d3d->menu_display.buffer, + d3d->menu_display.decl); + + d3d->menu_display.buffer = NULL; + d3d->menu_display.decl = NULL; +} + +static bool d3d9_init_base(d3d9_video_t *d3d, const video_info_t *info) +{ + D3DPRESENT_PARAMETERS d3dpp; +#ifndef _XBOX + HWND focus_window = win32_get_window(); +#endif + + memset(&d3dpp, 0, sizeof(d3dpp)); + + g_pD3D9 = (LPDIRECT3D9)d3d9_create(); + + /* this needs g_pD3D9 created first */ + d3d9_make_d3dpp(d3d, info, &d3dpp); + + if (!g_pD3D9) + return false; + if (!d3d9_create_device(&d3d->dev, &d3dpp, + g_pD3D9, + focus_window, + d3d->cur_mon_id) + ) + return false; + return true; +} + static bool renderchain_d3d_init_first( enum gfx_ctx_api api, const d3d9_renderchain_driver_t **renderchain_driver, @@ -199,6 +192,7 @@ static bool renderchain_d3d_init_first( return false; } + static bool d3d9_init_chain(d3d9_video_t *d3d, unsigned input_scale, bool rgb32) @@ -297,45 +291,6 @@ static bool d3d9_init_chain(d3d9_video_t *d3d, return true; } -static void d3d9_deinitialize(d3d9_video_t *d3d) -{ - if (!d3d) - return; - - font_driver_free_osd(); - - d3d9_deinit_chain(d3d); - d3d9_vertex_buffer_free(d3d->menu_display.buffer, - d3d->menu_display.decl); - - d3d->menu_display.buffer = NULL; - d3d->menu_display.decl = NULL; -} - -static bool d3d9_init_base(d3d9_video_t *d3d, const video_info_t *info) -{ - D3DPRESENT_PARAMETERS d3dpp; -#ifndef _XBOX - HWND focus_window = win32_get_window(); -#endif - - memset(&d3dpp, 0, sizeof(d3dpp)); - - g_pD3D9 = (LPDIRECT3D9)d3d9_create(); - - /* this needs g_pD3D9 created first */ - d3d9_make_d3dpp(d3d, info, &d3dpp); - - if (!g_pD3D9) - return false; - if (!d3d9_create_device(&d3d->dev, &d3dpp, - g_pD3D9, - focus_window, - d3d->cur_mon_id) - ) - return false; - return true; -} static bool d3d9_initialize(d3d9_video_t *d3d, const video_info_t *info) { @@ -433,6 +388,70 @@ static bool d3d9_initialize(d3d9_video_t *d3d, const video_info_t *info) return true; } + +static bool d3d9_restore(d3d9_video_t *d3d) +{ + d3d9_deinitialize(d3d); + + if (!d3d9_initialize(d3d, &d3d->video_info)) + { + RARCH_ERR("[D3D9]: Restore error.\n"); + return false; + } + + d3d->needs_restore = false; + + return true; +} + + +static bool d3d9_set_shader(void *data, + enum rarch_shader_type type, const char *path) +{ +#if defined(HAVE_CG) || defined(HAVE_HLSL) + d3d9_video_t *d3d = (d3d9_video_t*)data; + + if (!d3d) + return false; + + if (!string_is_empty(d3d->shader_path)) + free(d3d->shader_path); + d3d->shader_path = NULL; + + switch (type) + { + case RARCH_SHADER_CG: + case RARCH_SHADER_HLSL: + + if (type != supported_shader_type) + { + RARCH_WARN("[D3D9]: Shader preset %s is using unsupported shader type %s, falling back to stock %s.\n", + path, video_shader_type_to_str(type), video_shader_type_to_str(supported_shader_type)); + break; + } + + if (!string_is_empty(path)) + d3d->shader_path = strdup(path); + + break; + case RARCH_SHADER_NONE: + break; + default: + RARCH_WARN("[D3D9]: Only Cg shaders are supported. Falling back to stock.\n"); + } + + if (!d3d9_process_shader(d3d) || !d3d9_restore(d3d)) + { + RARCH_ERR("[D3D9]: Failed to set shader.\n"); + return false; + } + + return true; +#else + return false; +#endif +} + static bool d3d9_init_internal(d3d9_video_t *d3d, const video_info_t *info, input_driver_t **input, void **input_data) @@ -650,21 +669,6 @@ static void d3d9_free(void *data) free(d3d); } -bool d3d9_restore(d3d9_video_t *d3d) -{ - d3d9_deinitialize(d3d); - - if (!d3d9_initialize(d3d, &d3d->video_info)) - { - RARCH_ERR("[D3D9]: Restore error.\n"); - return false; - } - - d3d->needs_restore = false; - - return true; -} - static bool d3d9_frame(void *data, const void *frame, unsigned frame_width, unsigned frame_height, uint64_t frame_count, unsigned pitch, @@ -867,6 +871,83 @@ static bool d3d9_gfx_widgets_enabled(void *data) } #endif +static void d3d9_set_resize(d3d9_video_t *d3d, + unsigned new_width, unsigned new_height) +{ + /* No changes? */ + if ( (new_width == d3d->video_info.width) + && (new_height == d3d->video_info.height)) + return; + + d3d->video_info.width = new_width; + d3d->video_info.height = new_height; + video_driver_set_size(new_width, new_height); +} + +static bool d3d9_alive(void *data) +{ + unsigned temp_width = 0; + unsigned temp_height = 0; + bool ret = false; + bool quit = false; + bool resize = false; + d3d9_video_t *d3d = (d3d9_video_t*)data; + + /* Needed because some context drivers don't track their sizes */ + video_driver_get_size(&temp_width, &temp_height); + + win32_check_window(NULL, &quit, &resize, &temp_width, &temp_height); + + if (quit) + d3d->quitting = quit; + + if (resize) + { + d3d->should_resize = true; + d3d9_set_resize(d3d, temp_width, temp_height); + d3d9_restore(d3d); + } + + ret = !quit; + + if ( temp_width != 0 && + temp_height != 0) + video_driver_set_size(temp_width, temp_height); + + return ret; +} + +static void d3d9_set_nonblock_state(void *data, bool state, + bool adaptive_vsync_enabled, + unsigned swap_interval) +{ +#ifdef _XBOX + int interval = 0; +#endif + d3d9_video_t *d3d = (d3d9_video_t*)data; + + if (!d3d) + return; + +#ifdef _XBOX + if (!state) + interval = 1; +#endif + + d3d->video_info.vsync = !state; + +#ifdef _XBOX + d3d9_set_render_state(d3d->dev, + D3DRS_PRESENTINTERVAL, + interval ? + D3DPRESENT_INTERVAL_ONE : D3DPRESENT_INTERVAL_IMMEDIATE + ); +#else + d3d->needs_restore = true; + d3d9_restore(d3d); +#endif +} + video_driver_t video_d3d9 = { d3d9_init, d3d9_frame,