mirror of
https://github.com/libretro/RetroArch
synced 2025-03-01 07:13:35 +00:00
(D3D9) Cleanups
This commit is contained in:
parent
9a354982a9
commit
a5802ce757
@ -674,10 +674,9 @@ static D3DFORMAT d3d9_get_color_format_backbuffer(bool rgb32, bool windowed)
|
||||
bool d3d9_has_windowed(void *data) { return true; }
|
||||
#endif
|
||||
|
||||
void d3d9_make_d3dpp(void *data,
|
||||
void d3d9_make_d3dpp(d3d9_video_t *d3d,
|
||||
const video_info_t *info, void *_d3dpp)
|
||||
{
|
||||
d3d9_video_t *d3d = (d3d9_video_t*)data;
|
||||
D3DPRESENT_PARAMETERS *d3dpp = (D3DPRESENT_PARAMETERS*)_d3dpp;
|
||||
#ifdef _XBOX
|
||||
/* TODO/FIXME - get rid of global state dependencies. */
|
||||
@ -833,27 +832,22 @@ void d3d9_log_info(const struct LinkInfo *info)
|
||||
info->pass->filter == RARCH_FILTER_LINEAR ? "true" : "false");
|
||||
}
|
||||
|
||||
static bool d3d9_set_resize(d3d9_video_t *d3d,
|
||||
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 false;
|
||||
return;
|
||||
|
||||
d3d->video_info.width = new_width;
|
||||
d3d->video_info.height = new_height;
|
||||
video_driver_set_size(new_width, new_height);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool d3d9_init_singlepass(d3d9_video_t *d3d)
|
||||
static void d3d9_init_singlepass(d3d9_video_t *d3d)
|
||||
{
|
||||
struct video_shader_pass *pass = NULL;
|
||||
|
||||
if (!d3d)
|
||||
return false;
|
||||
struct video_shader_pass *pass = NULL;
|
||||
|
||||
memset(&d3d->shader, 0, sizeof(d3d->shader));
|
||||
d3d->shader.passes = 1;
|
||||
@ -870,8 +864,6 @@ static bool d3d9_init_singlepass(d3d9_video_t *d3d)
|
||||
if (!string_is_empty(d3d->shader_path))
|
||||
strlcpy(pass->source.path, d3d->shader_path,
|
||||
sizeof(pass->source.path));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool d3d9_init_multipass(d3d9_video_t *d3d, const char *shader_path)
|
||||
@ -930,13 +922,14 @@ static bool d3d9_init_multipass(d3d9_video_t *d3d, const char *shader_path)
|
||||
bool d3d9_process_shader(d3d9_video_t *d3d)
|
||||
{
|
||||
const char *shader_path = d3d->shader_path;
|
||||
if (d3d && !string_is_empty(shader_path))
|
||||
if (!string_is_empty(shader_path))
|
||||
{
|
||||
RARCH_ERR("[D3D9]: Failed to parse shader preset.\n");
|
||||
return d3d9_init_multipass(d3d, shader_path);
|
||||
}
|
||||
|
||||
return d3d9_init_singlepass(d3d);
|
||||
d3d9_init_singlepass(d3d);
|
||||
return true;
|
||||
}
|
||||
|
||||
void d3d9_viewport_info(void *data, struct video_viewport *vp)
|
||||
@ -955,6 +948,35 @@ void d3d9_viewport_info(void *data, struct video_viewport *vp)
|
||||
vp->full_height = height;
|
||||
}
|
||||
|
||||
void d3d9_set_viewport(void *data,
|
||||
unsigned width, unsigned height,
|
||||
bool force_full,
|
||||
bool allow_rotate)
|
||||
{
|
||||
int x = 0;
|
||||
int y = 0;
|
||||
d3d9_video_t *d3d = (d3d9_video_t*)data;
|
||||
|
||||
d3d9_calculate_rect(d3d, &width, &height, &x, &y,
|
||||
force_full, allow_rotate);
|
||||
|
||||
/* D3D doesn't support negative X/Y viewports ... */
|
||||
if (x < 0)
|
||||
x = 0;
|
||||
if (y < 0)
|
||||
y = 0;
|
||||
|
||||
d3d->final_viewport.X = x;
|
||||
d3d->final_viewport.Y = y;
|
||||
d3d->final_viewport.Width = width;
|
||||
d3d->final_viewport.Height = height;
|
||||
d3d->final_viewport.MinZ = 0.0f;
|
||||
d3d->final_viewport.MaxZ = 1.0f;
|
||||
|
||||
d3d9_set_font_rect(d3d, NULL);
|
||||
}
|
||||
|
||||
|
||||
#if defined(HAVE_MENU) || defined(HAVE_OVERLAY)
|
||||
void d3d9_overlay_render(d3d9_video_t *d3d,
|
||||
unsigned width,
|
||||
@ -978,7 +1000,7 @@ void d3d9_overlay_render(d3d9_video_t *d3d,
|
||||
D3DDECL_END()
|
||||
};
|
||||
|
||||
if (!d3d || !overlay || !overlay->tex)
|
||||
if (!overlay || !overlay->tex)
|
||||
return;
|
||||
|
||||
dev = d3d->dev;
|
||||
@ -1000,7 +1022,7 @@ void d3d9_overlay_render(d3d9_video_t *d3d,
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
vert[i].z = 0.5f;
|
||||
vert[i].z = 0.5f;
|
||||
vert[i].color = (((uint32_t)(overlay->alpha_mod * 0xFF)) << 24) | 0xFFFFFF;
|
||||
}
|
||||
|
||||
@ -1086,9 +1108,9 @@ void d3d9_set_nonblock_state(void *data, bool state,
|
||||
unsigned swap_interval)
|
||||
{
|
||||
#ifdef _XBOX
|
||||
int interval = 0;
|
||||
int interval = 0;
|
||||
#endif
|
||||
d3d9_video_t *d3d = (d3d9_video_t*)data;
|
||||
d3d9_video_t *d3d = (d3d9_video_t*)data;
|
||||
|
||||
if (!d3d)
|
||||
return;
|
||||
@ -1107,7 +1129,7 @@ void d3d9_set_nonblock_state(void *data, bool state,
|
||||
D3DPRESENT_INTERVAL_ONE : D3DPRESENT_INTERVAL_IMMEDIATE
|
||||
);
|
||||
#else
|
||||
d3d->needs_restore = true;
|
||||
d3d->needs_restore = true;
|
||||
d3d9_restore(d3d);
|
||||
#endif
|
||||
}
|
||||
@ -1439,14 +1461,13 @@ end:
|
||||
return ret;
|
||||
}
|
||||
|
||||
void d3d9_calculate_rect(void *data,
|
||||
void d3d9_calculate_rect(d3d9_video_t *d3d,
|
||||
unsigned *width, unsigned *height,
|
||||
int *x, int *y,
|
||||
bool force_full,
|
||||
bool allow_rotate)
|
||||
{
|
||||
float device_aspect = (float)*width / *height;
|
||||
d3d9_video_t *d3d = (d3d9_video_t*)data;
|
||||
settings_t *settings = config_get_ptr();
|
||||
bool scale_integer = settings->bools.video_scale_integer;
|
||||
|
||||
|
@ -811,10 +811,10 @@ static INLINE void d3d9_convert_geometry(
|
||||
}
|
||||
}
|
||||
|
||||
void d3d9_make_d3dpp(void *data,
|
||||
void d3d9_make_d3dpp(d3d9_video_t *d3d,
|
||||
const video_info_t *info, void *_d3dpp);
|
||||
|
||||
void d3d9_calculate_rect(void *data,
|
||||
void d3d9_calculate_rect(d3d9_video_t *d3d,
|
||||
unsigned *width, unsigned *height,
|
||||
int *x, int *y,
|
||||
bool force_full,
|
||||
@ -883,15 +883,20 @@ void d3d9_set_video_mode(void *data,
|
||||
|
||||
void d3d9_set_aspect_ratio(void *data, unsigned aspect_ratio_idx);
|
||||
|
||||
void d3d9_apply_state_changes(void *data);
|
||||
|
||||
void d3d9_set_menu_texture_frame(void *data,
|
||||
const void *frame, bool rgb32, unsigned width, unsigned height,
|
||||
float alpha);
|
||||
|
||||
void d3d9_set_viewport(void *data,
|
||||
unsigned width, unsigned height,
|
||||
bool force_full,
|
||||
bool allow_rotate);
|
||||
|
||||
void d3d9_set_menu_texture_enable(void *data,
|
||||
bool state, bool full_screen);
|
||||
|
||||
void d3d9_apply_state_changes(void *data);
|
||||
|
||||
bool d3d9_restore(d3d9_video_t *d3d);
|
||||
|
||||
extern LPDIRECT3D9 g_pD3D9;
|
||||
|
@ -48,13 +48,8 @@
|
||||
#include "../video_coord_array.h"
|
||||
#include "../../configuration.h"
|
||||
#include "../../dynamic.h"
|
||||
#include "../../ui/ui_companion_driver.h"
|
||||
#include "../../frontend/frontend_driver.h"
|
||||
|
||||
#ifdef HAVE_THREADS
|
||||
#include "../video_thread_wrapper.h"
|
||||
#endif
|
||||
|
||||
#include "../common/win32_common.h"
|
||||
|
||||
#ifdef HAVE_MENU
|
||||
@ -74,7 +69,7 @@
|
||||
#error "UWP does not support D3D9"
|
||||
#endif
|
||||
|
||||
/* Temporary workaround for d3d9 not being able to poll flags during init */
|
||||
/* TODO/FIXME - Temporary workaround for D3D9 not being able to poll flags during init */
|
||||
static gfx_ctx_driver_t d3d9_fake_context;
|
||||
|
||||
LPDIRECT3D9 g_pD3D9;
|
||||
@ -145,7 +140,6 @@ static bool d3d9_set_shader(void *data,
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
static void d3d9_deinit_chain(d3d9_video_t *d3d)
|
||||
{
|
||||
if (!d3d || !d3d->renderchain_driver)
|
||||
@ -320,10 +314,9 @@ static void d3d9_deinitialize(d3d9_video_t *d3d)
|
||||
d3d->menu_display.decl = NULL;
|
||||
}
|
||||
|
||||
static bool d3d9_init_base(void *data, const video_info_t *info)
|
||||
static bool d3d9_init_base(d3d9_video_t *d3d, const video_info_t *info)
|
||||
{
|
||||
D3DPRESENT_PARAMETERS d3dpp;
|
||||
d3d9_video_t *d3d = (d3d9_video_t*)data;
|
||||
#ifndef _XBOX
|
||||
HWND focus_window = win32_get_window();
|
||||
#endif
|
||||
@ -336,63 +329,22 @@ static bool d3d9_init_base(void *data, const video_info_t *info)
|
||||
d3d9_make_d3dpp(d3d, info, &d3dpp);
|
||||
|
||||
if (!g_pD3D9)
|
||||
{
|
||||
RARCH_ERR("[D3D9]: Failed to create D3D interface.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!d3d9_create_device(&d3d->dev, &d3dpp,
|
||||
g_pD3D9,
|
||||
focus_window,
|
||||
d3d->cur_mon_id)
|
||||
)
|
||||
{
|
||||
RARCH_ERR("[D3D9]: Failed to initialize device.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static void d3d9_set_viewport(void *data,
|
||||
unsigned width, unsigned height,
|
||||
bool force_full,
|
||||
bool allow_rotate)
|
||||
{
|
||||
int x = 0;
|
||||
int y = 0;
|
||||
d3d9_video_t *d3d = (d3d9_video_t*)data;
|
||||
|
||||
d3d9_calculate_rect(data, &width, &height, &x, &y,
|
||||
force_full, allow_rotate);
|
||||
|
||||
/* D3D doesn't support negative X/Y viewports ... */
|
||||
if (x < 0)
|
||||
x = 0;
|
||||
if (y < 0)
|
||||
y = 0;
|
||||
|
||||
d3d->final_viewport.X = x;
|
||||
d3d->final_viewport.Y = y;
|
||||
d3d->final_viewport.Width = width;
|
||||
d3d->final_viewport.Height = height;
|
||||
d3d->final_viewport.MinZ = 0.0f;
|
||||
d3d->final_viewport.MaxZ = 1.0f;
|
||||
|
||||
d3d9_set_font_rect(d3d, NULL);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static bool d3d9_initialize(d3d9_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_pD3D9)
|
||||
ret = d3d9_init_base(d3d, info);
|
||||
else if (d3d->needs_restore)
|
||||
@ -603,7 +555,11 @@ static bool d3d9_init_internal(d3d9_video_t *d3d,
|
||||
|
||||
version_str[0] = '\0';
|
||||
|
||||
snprintf(version_str, sizeof(version_str), "%u.%u.%u.%u", HIWORD(ident.DriverVersion.HighPart), LOWORD(ident.DriverVersion.HighPart), HIWORD(ident.DriverVersion.LowPart), LOWORD(ident.DriverVersion.LowPart));
|
||||
snprintf(version_str, sizeof(version_str), "%u.%u.%u.%u",
|
||||
HIWORD(ident.DriverVersion.HighPart),
|
||||
LOWORD(ident.DriverVersion.HighPart),
|
||||
HIWORD(ident.DriverVersion.LowPart),
|
||||
LOWORD(ident.DriverVersion.LowPart));
|
||||
|
||||
RARCH_LOG("[D3D9]: Using GPU: \"%s\".\n", ident.Description);
|
||||
RARCH_LOG("[D3D9]: GPU API Version: %s\n", version_str);
|
||||
@ -711,7 +667,6 @@ bool d3d9_restore(d3d9_video_t *d3d)
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
static bool d3d9_frame(void *data, const void *frame,
|
||||
unsigned frame_width, unsigned frame_height,
|
||||
uint64_t frame_count, unsigned pitch,
|
||||
|
Loading…
x
Reference in New Issue
Block a user