(D3D9) Cleanups

This commit is contained in:
libretroadmin 2022-05-15 16:27:51 +02:00
parent 720cca5e45
commit 28cd77c5b4
4 changed files with 43 additions and 106 deletions

View File

@ -649,7 +649,7 @@ static bool d3d9_is_windowed_enable(bool info_fullscreen)
return false;
}
static D3DFORMAT d3d9_get_color_format_backbuffer(bool rgb32, bool windowed)
static D3DFORMAT d3d9_get_color_format_backbuffer(bool rgb32)
{
if (rgb32)
return D3DFMT_X8R8G8B8;
@ -668,12 +668,13 @@ static bool d3d9_is_windowed_enable(bool info_fullscreen)
return false;
}
static D3DFORMAT d3d9_get_color_format_backbuffer(bool rgb32, bool windowed)
static D3DFORMAT d3d9_get_color_format_backbuffer(
bool rgb32, bool windowed)
{
if (windowed)
{
D3DDISPLAYMODE display_mode;
if (d3d9_get_adapter_display_mode(g_pD3D9, 0, &display_mode))
if (IDirect3D9_GetAdapterDisplayMode(g_pD3D9, 0, &display_mode))
return display_mode.Format;
}
return D3DFMT_X8R8G8B8;
@ -725,10 +726,10 @@ void d3d9_make_d3dpp(d3d9_video_t *d3d,
d3dpp->SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp->BackBufferCount = 2;
d3dpp->BackBufferFormat = d3d9_get_color_format_backbuffer(
info->rgb32, windowed_enable);
#ifdef _XBOX
d3dpp->BackBufferFormat = d3d9_get_color_format_backbuffer(
info->rgb32);
d3dpp->FrontBufferFormat = d3d9_get_color_format_front_buffer();
if (gamma_enable)
@ -739,6 +740,8 @@ void d3d9_make_d3dpp(d3d9_video_t *d3d,
d3dpp->FrontBufferFormat);
}
#else
d3dpp->BackBufferFormat = d3d9_get_color_format_backbuffer(
info->rgb32, windowed_enable);
d3dpp->hDeviceWindow = win32_get_window();
#endif
@ -1361,6 +1364,19 @@ void d3d9_set_video_mode(void *data,
#endif
}
static INLINE bool d3d9_device_get_render_target_data(
LPDIRECT3DDEVICE9 dev,
LPDIRECT3DSURFACE9 src, LPDIRECT3DSURFACE9 dst)
{
#ifndef _XBOX
if (dev &&
SUCCEEDED(IDirect3DDevice9_GetRenderTargetData(
dev, src, dst)))
return true;
#endif
return false;
}
bool d3d9_read_viewport(void *data, uint8_t *buffer, bool is_idle)
{
unsigned width, height;

View File

@ -89,17 +89,6 @@ void *d3d9_vertex_buffer_new(void *dev,
void d3d9_vertex_buffer_free(void *vertex_data, void *vertex_declaration);
static INLINE bool d3d9_texture_get_surface_level(
LPDIRECT3DTEXTURE9 tex,
unsigned idx, void **_ppsurface_level)
{
if (tex &&
SUCCEEDED(IDirect3DTexture9_GetSurfaceLevel(
tex, idx, (IDirect3DSurface9**)_ppsurface_level)))
return true;
return false;
}
void *d3d9_texture_new(void *dev,
const char *path, unsigned width, unsigned height,
unsigned miplevels, unsigned usage, INT32 format,
@ -107,25 +96,6 @@ void *d3d9_texture_new(void *dev,
INT32 color_key, void *src_info,
PALETTEENTRY *palette, bool want_mipmap);
static INLINE bool d3d9_create_vertex_shader(
LPDIRECT3DDEVICE9 dev, const DWORD *a, void **b)
{
if (dev && IDirect3DDevice9_CreateVertexShader(dev, a,
(LPDIRECT3DVERTEXSHADER9*)b) == D3D_OK)
return true;
return false;
}
static INLINE bool d3d9_create_pixel_shader(
LPDIRECT3DDEVICE9 dev, const DWORD *a, void **b)
{
if (dev &&
IDirect3DDevice9_CreatePixelShader(dev, a,
(LPDIRECT3DPIXELSHADER9*)b) == D3D_OK)
return true;
return false;
}
static INLINE bool d3d9_vertex_declaration_new(
LPDIRECT3DDEVICE9 dev,
const void *vertex_data, void **decl_data)
@ -140,22 +110,6 @@ static INLINE bool d3d9_vertex_declaration_new(
return false;
}
void d3d9_frame_postprocess(void *data);
static INLINE bool d3d9_device_get_render_target_data(
LPDIRECT3DDEVICE9 dev,
LPDIRECT3DSURFACE9 src, LPDIRECT3DSURFACE9 dst)
{
#ifndef _XBOX
if (dev &&
SUCCEEDED(IDirect3DDevice9_GetRenderTargetData(
dev, src, dst)))
return true;
#endif
return false;
}
static INLINE bool d3d9_device_get_render_target(
LPDIRECT3DDEVICE9 dev,
unsigned idx, void **data)
@ -187,23 +141,6 @@ static INLINE bool d3d9_device_create_offscreen_plain_surface(
return false;
}
static INLINE bool d3d9_get_adapter_display_mode(
LPDIRECT3D9 d3d,
unsigned idx,
D3DDISPLAYMODE *display_mode)
{
if (!d3d)
return false;
#ifndef _XBOX
if (FAILED(
IDirect3D9_GetAdapterDisplayMode(
d3d, idx, display_mode)))
return false;
#endif
return true;
}
bool d3d9_create_device(void *dev,
void *d3dpp,
void *d3d,
@ -212,38 +149,12 @@ bool d3d9_create_device(void *dev,
bool d3d9_reset(void *dev, void *d3dpp);
static INLINE void d3d9_device_free(LPDIRECT3DDEVICE9 dev, LPDIRECT3D9 pd3d)
{
if (dev)
IDirect3DDevice9_Release(dev);
if (pd3d)
IDirect3D9_Release(pd3d);
}
void *d3d9_create(void);
bool d3d9_initialize_symbols(enum gfx_ctx_api api);
void d3d9_deinitialize_symbols(void);
static INLINE bool d3d9_check_device_type(
LPDIRECT3D9 d3d,
unsigned idx,
INT32 disp_format,
INT32 backbuffer_format,
bool windowed_mode)
{
if (d3d &&
SUCCEEDED(IDirect3D9_CheckDeviceType(d3d,
0,
D3DDEVTYPE_HAL,
(D3DFORMAT)disp_format,
(D3DFORMAT)backbuffer_format,
windowed_mode)))
return true;
return false;
}
bool d3d9x_create_font_indirect(void *dev,
void *desc, void **font_data);

View File

@ -1133,8 +1133,8 @@ static void d3d9_cg_renderchain_render(
struct shader_pass *from_pass = (struct shader_pass*)&chain->passes->data[i];
struct shader_pass *to_pass = (struct shader_pass*)&chain->passes->data[i + 1];
d3d9_texture_get_surface_level(to_pass->tex, 0, (void**)&target);
IDirect3DTexture9_GetSurfaceLevel(
(LPDIRECT3DTEXTURE9)to_pass->tex, 0, (IDirect3DSurface9**)&target);
IDirect3DDevice9_SetRenderTarget(chain->dev, 0, target);
d3d9_convert_geometry(&from_pass->info,
@ -1407,7 +1407,7 @@ static bool d3d9_cg_initialize(d3d9_video_t *d3d, const video_info_t *info)
if (!d3d9_reset(d3d->dev, &d3dpp))
{
d3d9_cg_deinitialize(d3d);
d3d9_device_free(NULL, g_pD3D9);
IDirect3D9_Release(g_pD3D9);
g_pD3D9 = NULL;
ret = d3d9_cg_init_base(d3d, info);
@ -1715,8 +1715,9 @@ static void d3d9_cg_free(void *data)
if (!string_is_empty(d3d->shader_path))
free(d3d->shader_path);
IDirect3DDevice9_Release(d3d->dev);
IDirect3D9_Release(g_pD3D9);
d3d->shader_path = NULL;
d3d9_device_free(d3d->dev, g_pD3D9);
d3d->dev = NULL;
g_pD3D9 = NULL;

View File

@ -155,8 +155,12 @@ static bool d3d9_hlsl_load_program_from_file(
goto error;
}
d3d9_create_pixel_shader(dev, (const DWORD*)d3d9x_get_buffer_ptr(code_f), (void**)&pass->fprg);
d3d9_create_vertex_shader(dev, (const DWORD*)d3d9x_get_buffer_ptr(code_v), (void**)&pass->vprg);
IDirect3DDevice9_CreatePixelShader(dev,
(const DWORD*)d3d9x_get_buffer_ptr(code_f),
(LPDIRECT3DPIXELSHADER9*)&pass->fprg);
IDirect3DDevice9_CreateVertexShader(dev,
(const DWORD*)d3d9x_get_buffer_ptr(code_v),
(LPDIRECT3DVERTEXSHADER9*)&pass->vprg);
d3d9x_buffer_release((void*)code_f);
d3d9x_buffer_release((void*)code_v);
@ -199,8 +203,12 @@ static bool d3d9_hlsl_load_program(
goto error;
}
d3d9_create_pixel_shader(dev, (const DWORD*)d3d9x_get_buffer_ptr(code_f), (void**)&pass->fprg);
d3d9_create_vertex_shader(dev, (const DWORD*)d3d9x_get_buffer_ptr(code_v), (void**)&pass->vprg);
IDirect3DDevice9_CreatePixelShader(dev,
(const DWORD*)d3d9x_get_buffer_ptr(code_f),
(LPDIRECT3DPIXELSHADER9*)&pass->fprg);
IDirect3DDevice9_CreateVertexShader(dev,
(const DWORD*)d3d9x_get_buffer_ptr(code_v),
(LPDIRECT3DVERTEXSHADER9*)&pass->vprg);
d3d9x_buffer_release((void*)code_f);
d3d9x_buffer_release((void*)code_v);
@ -683,8 +691,8 @@ static void hlsl_d3d9_renderchain_render(
struct shader_pass *to_pass = (struct shader_pass*)
&chain->chain.passes->data[i + 1];
d3d9_texture_get_surface_level(to_pass->tex, 0, (void**)&target);
IDirect3DTexture9_GetSurfaceLevel(
(LPDIRECT3DTEXTURE9)to_pass->tex, 0, (IDirect3DSurface9**)&target);
IDirect3DDevice9_SetRenderTarget(chain->chain.dev, 0, target);
d3d9_convert_geometry(&from_pass->info,
@ -966,7 +974,7 @@ static bool d3d9_hlsl_initialize(
if (!d3d9_reset(d3d->dev, &d3dpp))
{
d3d9_hlsl_deinitialize(d3d);
d3d9_device_free(NULL, g_pD3D9);
IDirect3D9_Release(g_pD3D9);
g_pD3D9 = NULL;
ret = d3d9_hlsl_init_base(d3d, info);
@ -1277,8 +1285,9 @@ static void d3d9_hlsl_free(void *data)
if (!string_is_empty(d3d->shader_path))
free(d3d->shader_path);
IDirect3DDevice9_Release(d3d->dev);
IDirect3D9_Release(g_pD3D9);
d3d->shader_path = NULL;
d3d9_device_free(d3d->dev, g_pD3D9);
d3d->dev = NULL;
g_pD3D9 = NULL;