diff --git a/src/osd/windows/d3dintf.h b/src/osd/windows/d3dintf.h index caa17341e84..d53824be9c5 100644 --- a/src/osd/windows/d3dintf.h +++ b/src/osd/windows/d3dintf.h @@ -234,7 +234,9 @@ struct _d3d // PROTOTYPES //============================================================ +#if DIRECT3D_VERSION < 0x0900 d3d *drawd3d8_init(void); +#endif d3d *drawd3d9_init(void); diff --git a/src/osd/windows/drawd3d.c b/src/osd/windows/drawd3d.c index 274b8e1ef7b..ad94eb76269 100644 --- a/src/osd/windows/drawd3d.c +++ b/src/osd/windows/drawd3d.c @@ -455,9 +455,11 @@ int drawd3d_init(win_draw_callbacks *callbacks) if (version >= 9) d3dintf = drawd3d9_init(); +#if DIRECT3D_VERSION < 0x0900 // if that didn't work, try Direct3D 8 if (d3dintf == NULL && version >= 8) d3dintf = drawd3d8_init(); +#endif // if we failed, note the error if (d3dintf == NULL) diff --git a/src/osd/windows/input.c b/src/osd/windows/input.c index 1d2c48141c6..fbf3857b77e 100644 --- a/src/osd/windows/input.c +++ b/src/osd/windows/input.c @@ -18,10 +18,6 @@ // undef WINNT for dinput.h to prevent duplicate definition #undef WINNT -#ifdef DIRECTINPUT_VERSION -#undef DIRECTINPUT_VERSION -#endif -#define DIRECTINPUT_VERSION 0x0700 #include // standard C headers @@ -1054,6 +1050,23 @@ static void win32_lightgun_poll(device_info *devinfo) static void dinput_init(running_machine *machine) { HRESULT result; +#if DIRECTINPUT_VERSION >= 0x800 + int didevtype_keyboard = DI8DEVCLASS_KEYBOARD; + int didevtype_mouse = DI8DEVCLASS_POINTER; + int didevtype_joystick = DI8DEVCLASS_GAMECTRL; + + // first attempt to initialize DirectInput at the current version + dinput_version = DIRECTINPUT_VERSION; + result = DirectInput8Create(GetModuleHandle(NULL), dinput_version, &IID_IDirectInput8, &dinput, NULL); + if (result != DI_OK) + { + dinput_version = 0; + return; + } +#else + int didevtype_keyboard = DIDEVTYPE_KEYBOARD; + int didevtype_mouse = DIDEVTYPE_MOUSE; + int didevtype_joystick = DIDEVTYPE_JOYSTICK; // first attempt to initialize DirectInput at the current version dinput_version = DIRECTINPUT_VERSION; @@ -1075,6 +1088,8 @@ static void dinput_init(running_machine *machine) } } } +#endif + mame_printf_verbose("DirectInput: Using DirectInput %d\n", dinput_version >> 8); // we need an exit callback @@ -1084,7 +1099,7 @@ static void dinput_init(running_machine *machine) if (keyboard_list == NULL) { // enumerate the ones we have - result = IDirectInput_EnumDevices(dinput, DIDEVTYPE_KEYBOARD, dinput_keyboard_enum, 0, DIEDFL_ATTACHEDONLY); + result = IDirectInput_EnumDevices(dinput, didevtype_keyboard, dinput_keyboard_enum, 0, DIEDFL_ATTACHEDONLY); if (result != DI_OK) fatalerror("DirectInput: Unable to enumerate keyboards (result=%08X)\n", (UINT32)result); } @@ -1093,13 +1108,13 @@ static void dinput_init(running_machine *machine) if (mouse_list == NULL) { // enumerate the ones we have - result = IDirectInput_EnumDevices(dinput, DIDEVTYPE_MOUSE, dinput_mouse_enum, 0, DIEDFL_ATTACHEDONLY); + result = IDirectInput_EnumDevices(dinput, didevtype_mouse, dinput_mouse_enum, 0, DIEDFL_ATTACHEDONLY); if (result != DI_OK) fatalerror("DirectInput: Unable to enumerate mice (result=%08X)\n", (UINT32)result); } // initialize joystick devices - result = IDirectInput_EnumDevices(dinput, DIDEVTYPE_JOYSTICK, dinput_joystick_enum, 0, DIEDFL_ATTACHEDONLY); + result = IDirectInput_EnumDevices(dinput, didevtype_joystick, dinput_joystick_enum, 0, DIEDFL_ATTACHEDONLY); if (result != DI_OK) fatalerror("DirectInput: Unable to enumerate joysticks (result=%08X)\n", (UINT32)result); } diff --git a/src/osd/windows/windows.mak b/src/osd/windows/windows.mak index c474faf85aa..696983f961f 100644 --- a/src/osd/windows/windows.mak +++ b/src/osd/windows/windows.mak @@ -194,8 +194,16 @@ ifdef WIN95_MULTIMON CFLAGS += -DWIN95_MULTIMON endif -# add the windows libaries -LIBS += -luser32 -lgdi32 -lddraw -ldsound -ldinput -ldxguid -lwinmm -ladvapi32 -lcomctl32 -lshlwapi +# add the windows libraries +LIBS += -luser32 -lgdi32 -lddraw -ldsound -ldxguid -lwinmm -ladvapi32 -lcomctl32 -lshlwapi + +ifeq ($(DIRECTINPUT),7) +LIBS += -ldinput +CFLAGS += -DDIRECTINPUT_VERSION=0x0700 +else +LIBS += -ldinput8 +CFLAGS += -DDIRECTINPUT_VERSION=0x0800 +endif ifdef PTR64 ifdef MSVC_BUILD @@ -236,7 +244,6 @@ endif #------------------------------------------------- OSDOBJS = \ - $(WINOBJ)/d3d8intf.o \ $(WINOBJ)/d3d9intf.o \ $(WINOBJ)/drawd3d.o \ $(WINOBJ)/drawdd.o \ @@ -249,6 +256,12 @@ OSDOBJS = \ $(WINOBJ)/window.o \ $(WINOBJ)/winmain.o +ifeq ($(DIRECT3D),8) +OSDOBJS += $(WINOBJ)/d3d8intf.o +else +CFLAGS += -DDIRECT3D_VERSION=0x0900 +endif + # extra dependencies $(WINOBJ)/drawdd.o : $(SRC)/emu/rendersw.c $(WINOBJ)/drawgdi.o : $(SRC)/emu/rendersw.c