From 88d1e455e3a3b972a7899a57f395208d5b0b22c0 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sun, 7 Jan 2018 10:46:30 +0100 Subject: [PATCH] Add code that allows for debug D3D --- audio/drivers/dsound.c | 2 +- gfx/common/d3d_common.c | 9 ++++++++- gfx/drivers/d3d.c | 11 ++++++++++- gfx/drivers_renderchain/d3d8_renderchain.c | 2 +- libretro-common/compat/compat_snprintf.c | 18 ++++++++++++++++++ 5 files changed, 38 insertions(+), 4 deletions(-) diff --git a/audio/drivers/dsound.c b/audio/drivers/dsound.c index 09b8119f87..d6a89db3c0 100644 --- a/audio/drivers/dsound.c +++ b/audio/drivers/dsound.c @@ -21,8 +21,8 @@ #ifndef _XBOX #include -#include #include +#include #endif #include diff --git a/gfx/common/d3d_common.c b/gfx/common/d3d_common.c index 47b2279af2..7332317874 100644 --- a/gfx/common/d3d_common.c +++ b/gfx/common/d3d_common.c @@ -174,7 +174,11 @@ bool d3d_initialize_symbols(void) return true; #if defined(HAVE_D3D9) +#if defined(DEBUG) || defined(_DEBUG) + g_d3d_dll = dylib_load("d3d9d.dll"); +#else g_d3d_dll = dylib_load("d3d9.dll"); +#endif #ifdef HAVE_D3DX g_d3dx_dll = dylib_load_d3dx(); #endif @@ -187,8 +191,11 @@ bool d3d_initialize_symbols(void) #endif #elif defined(HAVE_D3D8) +#if defined(DEBUG) || defined(_DEBUG) + g_d3d_dll = dylib_load("d3d8d.dll"); +#else g_d3d_dll = dylib_load("d3d8.dll"); - +#endif if (!g_d3d_dll) return false; #endif diff --git a/gfx/drivers/d3d.c b/gfx/drivers/d3d.c index bab096b67c..42f8e523de 100644 --- a/gfx/drivers/d3d.c +++ b/gfx/drivers/d3d.c @@ -576,6 +576,12 @@ void d3d_make_d3dpp(void *data, } } +#ifdef HAVE_D3D8 + /* PresentationInterval must be zero for windowed mode on DX8. */ + if (d3dpp->Windowed) + FS_PRESENTINTERVAL(d3dpp) = D3DPRESENT_INTERVAL_DEFAULT; +#endif + d3dpp->SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp->BackBufferCount = 2; d3dpp->BackBufferFormat = d3d_get_color_format_backbuffer(info->rgb32, windowed_enable); @@ -670,10 +676,13 @@ static bool d3d_init_base(void *data, const video_info_t *info) #endif d3d_video_t *d3d = (d3d_video_t*)data; - d3d_make_d3dpp(d3d, info, &d3dpp); + memset(&d3dpp, 0, sizeof(d3dpp)); g_pD3D = (LPDIRECT3D)d3d_create(); + /* this needs g_pD3D created first */ + d3d_make_d3dpp(d3d, info, &d3dpp); + if (!g_pD3D) { RARCH_ERR("[D3D]: Failed to create D3D interface.\n"); diff --git a/gfx/drivers_renderchain/d3d8_renderchain.c b/gfx/drivers_renderchain/d3d8_renderchain.c index 157948cac7..b70b8319a7 100644 --- a/gfx/drivers_renderchain/d3d8_renderchain.c +++ b/gfx/drivers_renderchain/d3d8_renderchain.c @@ -209,7 +209,7 @@ static void d3d8_renderchain_free(void *data) { d3d_video_t *chain = (d3d_video_t*)data; - if (!chain) + if (!chain || !chain->renderchain_data) return; d3d8_renderchain_deinit(chain->renderchain_data); diff --git a/libretro-common/compat/compat_snprintf.c b/libretro-common/compat/compat_snprintf.c index 8baa56a618..03bfba64da 100644 --- a/libretro-common/compat/compat_snprintf.c +++ b/libretro-common/compat/compat_snprintf.c @@ -28,6 +28,24 @@ #include #include +#if _MSC_VER < 1800 +#define va_copy(dst, src) ((dst) = (src)) +#endif + +#if _MSC_VER < 1300 +#define _vscprintf c89_vscprintf_retro__ + +static int c89_vscprintf_retro__(const char *format, va_list pargs) +{ + int retval; + va_list argcopy; + va_copy(argcopy, pargs); + retval = vsnprintf(NULL, 0, format, argcopy); + va_end(argcopy); + return retval; +} +#endif + /* http://stackoverflow.com/questions/2915672/snprintf-and-visual-studio-2010 */ int c99_vsnprintf_retro__(char *outBuf, size_t size, const char *format, va_list ap)