From b56f3ca9bb8334870da9fc6ffa8351c5f3cc7efe Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Fri, 12 Feb 2021 21:01:17 +1100 Subject: [PATCH] Direct3D9: Don't crash if no video memory when initially trying to create device --- src/Graphics.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Graphics.c b/src/Graphics.c index 0203059b7..8e8acf001 100644 --- a/src/Graphics.c +++ b/src/Graphics.c @@ -323,7 +323,7 @@ static DWORD d3d9_formatMappings[2] = { D3DFVF_XYZ | D3DFVF_DIFFUSE, D3DFVF_XYZ static IDirect3D9* d3d; static IDirect3DDevice9* device; -static DWORD createFlags = D3DCREATE_HARDWARE_VERTEXPROCESSING; +static DWORD createFlags; static D3DFORMAT viewFormat, depthFormat; static int cachedWidth, cachedHeight; static int depthBits; @@ -430,6 +430,7 @@ static void TryCreateDevice(void) { D3D9_FillPresentArgs(&args); /* Try to create a device with as much hardware usage as possible. */ + createFlags = D3DCREATE_HARDWARE_VERTEXPROCESSING; res = IDirect3D9_CreateDevice(d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, winHandle, createFlags, &args, &device); /* Another running fullscreen application might prevent creating device */ if (res == D3DERR_DEVICELOST) { Gfx.LostContext = true; return; } @@ -444,6 +445,9 @@ static void TryCreateDevice(void) { res = IDirect3D9_CreateDevice(d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, winHandle, createFlags, &args, &device); } + /* Not enough memory? Try again later in a bit */ + if (res == D3DERR_OUTOFVIDEOMEMORY) { Gfx.LostContext = true; return; } + if (res) Logger_Abort2(res, "Creating Direct3D9 device"); res = IDirect3DDevice9_GetDeviceCaps(device, &caps); if (res) Logger_Abort2(res, "Getting Direct3D9 capabilities");