From 5fc3764253af35406053403d8b55712ec1529262 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Sat, 21 Oct 2023 06:27:59 +0200 Subject: [PATCH] add fallback solution for rgb555 texture format issues --- src/dd.c | 2 +- src/render_d3d9.c | 54 +++++++++++++++++++++++++++++++++++++---------- 2 files changed, 44 insertions(+), 12 deletions(-) diff --git a/src/dd.c b/src/dd.c index 9d38296..ab5fc5b 100644 --- a/src/dd.c +++ b/src/dd.c @@ -1441,7 +1441,7 @@ HRESULT dd_CreateEx(GUID* lpGuid, LPVOID* lplpDD, REFIID iid, IUnknown* pUnkOute TRACE(" proc_affinity=%08X, system_affinity=%08X\n", proc_affinity, system_affinity); } - + if (_strcmpi(g_config.renderer, "direct3d9on12") == 0) { g_ddraw->d3d9on12 = TRUE; diff --git a/src/render_d3d9.c b/src/render_d3d9.c index cae506b..ead6db2 100644 --- a/src/render_d3d9.c +++ b/src/render_d3d9.c @@ -275,17 +275,49 @@ static BOOL d3d9_create_resources() for (int i = 0; i < D3D9_TEXTURE_COUNT; i++) { - err = err || FAILED( - IDirect3DDevice9_CreateTexture( - g_d3d9.device, - g_d3d9.tex_width, - g_d3d9.tex_height, - 1, - 0, - g_ddraw->bpp == 16 ? (g_config.rgb555 ? D3DFMT_X1R5G5B5 : D3DFMT_R5G6B5) : g_ddraw->bpp == 32 ? D3DFMT_X8R8G8B8 : D3DFMT_L8, - D3DPOOL_MANAGED, - &g_d3d9.surface_tex[i], - 0)); + if (g_ddraw->bpp == 16 && g_config.rgb555) + { + BOOL error = FAILED( + IDirect3DDevice9_CreateTexture( + g_d3d9.device, + g_d3d9.tex_width, + g_d3d9.tex_height, + 1, + 0, + D3DFMT_X1R5G5B5, + D3DPOOL_MANAGED, + &g_d3d9.surface_tex[i], + 0)); + + if (error) + { + err = err || FAILED( + IDirect3DDevice9_CreateTexture( + g_d3d9.device, + g_d3d9.tex_width, + g_d3d9.tex_height, + 1, + 0, + D3DFMT_A1R5G5B5, + D3DPOOL_MANAGED, + &g_d3d9.surface_tex[i], + 0)); + } + } + else + { + err = err || FAILED( + IDirect3DDevice9_CreateTexture( + g_d3d9.device, + g_d3d9.tex_width, + g_d3d9.tex_height, + 1, + 0, + g_ddraw->bpp == 16 ? D3DFMT_R5G6B5 : g_ddraw->bpp == 32 ? D3DFMT_X8R8G8B8 : D3DFMT_L8, + D3DPOOL_MANAGED, + &g_d3d9.surface_tex[i], + 0)); + } err = err || !g_d3d9.surface_tex[i];