(D3D9) Move functions to d3d9.c

This commit is contained in:
twinaphex 2022-04-19 14:49:08 +02:00
parent 6a032fc1f8
commit 6195711bb3
3 changed files with 182 additions and 186 deletions

View File

@ -833,19 +833,6 @@ void d3d9_log_info(const struct LinkInfo *info)
info->pass->filter == RARCH_FILTER_LINEAR ? "true" : "false"); 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) static void d3d9_init_singlepass(d3d9_video_t *d3d)
{ {
struct video_shader_pass *pass = NULL; struct video_shader_pass *pass = NULL;
@ -1133,70 +1120,6 @@ void d3d9_free_overlay(d3d9_video_t *d3d, overlay_t *overlay)
} }
#endif #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) bool d3d9_suppress_screensaver(void *data, bool enable)
{ {
#ifdef _XBOX #ifdef _XBOX

View File

@ -781,12 +781,6 @@ void d3d9_get_overlay_interface(void *data,
const video_overlay_interface_t **iface); const video_overlay_interface_t **iface);
#endif #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_set_rotation(void *data, unsigned rot);
void d3d9_viewport_info(void *data, struct video_viewport *vp); 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); void d3d9_apply_state_changes(void *data);
bool d3d9_restore(d3d9_video_t *d3d);
extern LPDIRECT3D9 g_pD3D9; extern LPDIRECT3D9 g_pD3D9;
RETRO_END_DECLS RETRO_END_DECLS

View File

@ -92,53 +92,6 @@ static uint32_t d3d9_get_flags(void *data)
return flags; 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) static void d3d9_deinit_chain(d3d9_video_t *d3d)
{ {
if (!d3d || !d3d->renderchain_driver) if (!d3d || !d3d->renderchain_driver)
@ -151,6 +104,46 @@ static void d3d9_deinit_chain(d3d9_video_t *d3d)
d3d->renderchain_data = NULL; 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( static bool renderchain_d3d_init_first(
enum gfx_ctx_api api, enum gfx_ctx_api api,
const d3d9_renderchain_driver_t **renderchain_driver, const d3d9_renderchain_driver_t **renderchain_driver,
@ -199,6 +192,7 @@ static bool renderchain_d3d_init_first(
return false; return false;
} }
static bool d3d9_init_chain(d3d9_video_t *d3d, static bool d3d9_init_chain(d3d9_video_t *d3d,
unsigned input_scale, unsigned input_scale,
bool rgb32) bool rgb32)
@ -297,45 +291,6 @@ static bool d3d9_init_chain(d3d9_video_t *d3d,
return true; 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) 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; 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, static bool d3d9_init_internal(d3d9_video_t *d3d,
const video_info_t *info, input_driver_t **input, const video_info_t *info, input_driver_t **input,
void **input_data) void **input_data)
@ -650,21 +669,6 @@ static void d3d9_free(void *data)
free(d3d); 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, static bool d3d9_frame(void *data, const void *frame,
unsigned frame_width, unsigned frame_height, unsigned frame_width, unsigned frame_height,
uint64_t frame_count, unsigned pitch, uint64_t frame_count, unsigned pitch,
@ -867,6 +871,83 @@ static bool d3d9_gfx_widgets_enabled(void *data)
} }
#endif #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 = { video_driver_t video_d3d9 = {
d3d9_init, d3d9_init,
d3d9_frame, d3d9_frame,