summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/osd/modules/input/input_dinput.cpp16
-rw-r--r--src/osd/modules/input/input_dinput.h16
2 files changed, 28 insertions, 4 deletions
diff --git a/src/osd/modules/input/input_dinput.cpp b/src/osd/modules/input/input_dinput.cpp
index d8400a8346c..81351608b8a 100644
--- a/src/osd/modules/input/input_dinput.cpp
+++ b/src/osd/modules/input/input_dinput.cpp
@@ -47,7 +47,11 @@ static INT32 dinput_joystick_pov_get_state(void *device_internal, void *item_int
// dinput_set_dword_property
//============================================================
+#if DIRECTINPUT_VERSION >= 0x0800
+static HRESULT dinput_set_dword_property(ComPtr<IDirectInputDevice8> device, REFGUID property_guid, DWORD object, DWORD how, DWORD value)
+#else
static HRESULT dinput_set_dword_property(ComPtr<IDirectInputDevice> device, REFGUID property_guid, DWORD object, DWORD how, DWORD value)
+#endif
{
DIPROPDWORD dipdw;
@@ -81,8 +85,12 @@ HRESULT dinput_device::poll_dinput(LPVOID pState) const
HRESULT result;
// first poll the device, then get the state
+#if DIRECTINPUT_VERSION >= 0x0800
+ dinput.device->Poll();
+#else
if (dinput.device2 != nullptr)
dinput.device2->Poll();
+#endif
// GetDeviceState returns the immediate state
result = dinput.device->GetDeviceState(dinput.format->dwDataSize, pState);
@@ -142,6 +150,7 @@ int dinput_api_helper::initialize()
{
HRESULT result;
+#if DIRECTINPUT_VERSION >= 0x0800
if (m_dinput_version >= 0x0800)
{
result = DirectInput8Create(GetModuleHandleUni(), m_dinput_version, IID_IDirectInput8, reinterpret_cast<void **>(m_dinput.GetAddressOf()), nullptr);
@@ -152,6 +161,7 @@ int dinput_api_helper::initialize()
}
}
else
+#endif
{
result = m_pfn_DirectInputCreate.initialize();
if (result != DI_OK)
@@ -285,7 +295,7 @@ public:
int dinput_devclass() override
{
-#if DIRECTINPUT_VERSION >= 0x800
+#if DIRECTINPUT_VERSION >= 0x0800
return DI8DEVCLASS_KEYBOARD;
#else
return DIDEVTYPE_KEYBOARD;
@@ -356,7 +366,7 @@ public:
int dinput_devclass() override
{
-#if DIRECTINPUT_VERSION >= 0x800
+#if DIRECTINPUT_VERSION >= 0x0800
return DI8DEVCLASS_POINTER;
#else
return DIDEVTYPE_MOUSE;
@@ -550,7 +560,7 @@ public:
int dinput_devclass() override
{
-#if DIRECTINPUT_VERSION >= 0x800
+#if DIRECTINPUT_VERSION >= 0x0800
return DI8DEVCLASS_GAMECTRL;
#else
return DIDEVTYPE_JOYSTICK;
diff --git a/src/osd/modules/input/input_dinput.h b/src/osd/modules/input/input_dinput.h
index 3d3cf7e6544..b314b3bd538 100644
--- a/src/osd/modules/input/input_dinput.h
+++ b/src/osd/modules/input/input_dinput.h
@@ -11,8 +11,12 @@
// DirectInput-specific information about a device
struct dinput_api_state
{
+#if DIRECTINPUT_VERSION >= 0x0800
+ Microsoft::WRL::ComPtr<IDirectInputDevice8> device;
+#else
Microsoft::WRL::ComPtr<IDirectInputDevice> device;
Microsoft::WRL::ComPtr<IDirectInputDevice2> device2;
+#endif
DIDEVCAPS caps;
LPCDIDATAFORMAT format;
};
@@ -39,12 +43,20 @@ public:
virtual BOOL device_enum_callback(LPCDIDEVICEINSTANCE instance, LPVOID ref) = 0;
};
+#if DIRECTINPUT_VERSION >= 0x0800
+typedef lazy_loaded_function_p4<HRESULT, HMODULE, int, IDirectInput8 **, LPUNKNOWN> pfn_dinput_create;
+#else
typedef lazy_loaded_function_p4<HRESULT, HMODULE, int, IDirectInput **, LPUNKNOWN> pfn_dinput_create;
+#endif
class dinput_api_helper
{
private:
+#if DIRECTINPUT_VERSION >= 0x0800
+ Microsoft::WRL::ComPtr<IDirectInput8> m_dinput;
+#else
Microsoft::WRL::ComPtr<IDirectInput> m_dinput;
+#endif
int m_dinput_version;
pfn_dinput_create m_pfn_DirectInputCreate;
@@ -76,10 +88,12 @@ public:
if (result != DI_OK)
goto error;
- // try to get a version 2 device for it
+#if DIRECTINPUT_VERSION < 0x0800
+ // try to get a version 2 device for it so we can use the poll method
result = devinfo->dinput.device.CopyTo(IID_IDirectInputDevice2, reinterpret_cast<void**>(devinfo->dinput.device2.GetAddressOf()));
if (result != DI_OK)
devinfo->dinput.device2 = nullptr;
+#endif
// get the caps
devinfo->dinput.caps.dwSize = sizeof(devinfo->dinput.caps);