1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-15 06:04:49 +01:00

add option to enable direct3d 12 renderer (via MS 9on12)

This commit is contained in:
FunkyFr3sh 2022-09-20 11:21:32 +02:00
parent 9ac9aa3c6a
commit 5616af006b
4 changed files with 30 additions and 5 deletions

View File

@ -149,6 +149,7 @@ typedef struct CNCDDRAW
BOOL lock_surfaces;
BOOL d3d9linear;
BOOL gdilinear;
BOOL d3d9on12;
int resolutions;
BOOL armadahack;
BOOL tshack;

View File

@ -27,6 +27,17 @@ typedef struct D3D9RENDERER
int tex_height;
} D3D9RENDERER;
#define MAX_D3D9ON12_QUEUES 2
typedef struct _D3D9ON12_ARGS
{
BOOL Enable9On12;
IUnknown* pD3D12Device;
IUnknown* ppD3D12Queues[MAX_D3D9ON12_QUEUES];
UINT NumQueues;
UINT NodeMask;
} D3D9ON12_ARGS;
BOOL d3d9_is_available();
DWORD WINAPI d3d9_render_main(void);
BOOL d3d9_create();

View File

@ -46,6 +46,7 @@ void cfg_load()
g_ddraw->releasealt = cfg_get_bool("releasealt", FALSE);
g_ddraw->d3d9linear = cfg_get_bool("d3d9linear", TRUE);
g_ddraw->gdilinear = cfg_get_bool("gdilinear", FALSE);
g_ddraw->d3d9on12 = cfg_get_bool("d3d9on12", FALSE);
g_ddraw->resolutions = cfg_get_int("resolutions", RESLIST_NORMAL);
g_ddraw->fpupreserve = cfg_get_bool("fpupreserve", FALSE);
g_ddraw->allow_wmactivate = cfg_get_bool("allow_wmactivate", FALSE);
@ -154,7 +155,7 @@ void cfg_load()
{
g_ddraw->renderer = gdi_render_main;
}
else if (tolower(tmp[0]) == 'd') /* direct3d9 */
else if (tolower(tmp[0]) == 'd' || g_ddraw->d3d9on12) /* direct3d9 */
{
g_ddraw->renderer = d3d9_render_main;
}
@ -347,7 +348,8 @@ static void cfg_create_ini()
"fpupreserve=false\n"
"\n"
"\n"
"; Undocumented compatibility settings\n"
"; Undocumented settings\n"
"d3d9on12=false\n"
"accuratetimers=false\n"
"fixpitch=true\n"
"fixwndprochook=false\n"

View File

@ -53,10 +53,21 @@ BOOL d3d9_create()
d3d9_enable_shim(TRUE);
}
IDirect3D9* (WINAPI * d3d_create9)(UINT) =
(IDirect3D9 * (WINAPI*)(UINT))GetProcAddress(g_d3d9.hmodule, "Direct3DCreate9");
D3D9ON12_ARGS args;
memset(&args, 0, sizeof(args));
args.Enable9On12 = TRUE;
if (d3d_create9 && (g_d3d9.instance = d3d_create9(D3D_SDK_VERSION)))
IDirect3D9* (WINAPI * d3d_create9on12)(INT, D3D9ON12_ARGS*, UINT) = NULL;
if (g_ddraw->d3d9on12)
{
d3d_create9on12 = (void*)GetProcAddress(g_d3d9.hmodule, "Direct3DCreate9On12");
}
IDirect3D9* (WINAPI * d3d_create9)(UINT) = (void*)GetProcAddress(g_d3d9.hmodule, "Direct3DCreate9");
if ((d3d_create9on12 && (g_d3d9.instance = d3d_create9on12(D3D_SDK_VERSION, &args, 1))) ||
(d3d_create9 && (g_d3d9.instance = d3d_create9(D3D_SDK_VERSION))))
{
g_d3d9.bits_per_pixel = g_ddraw->render.bpp ? g_ddraw->render.bpp : g_ddraw->mode.dmBitsPerPel;