mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-01-28 22:04:43 -08:00
Added dinput-joy-directX3 patchset
This commit is contained in:
parent
d6ab62c2be
commit
dc2e2153f3
@ -0,0 +1,103 @@
|
||||
From 4ec91bab963a508a30bc1a77b785a5014d6bf264 Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Wed, 1 May 2019 12:22:14 +1000
|
||||
Subject: [PATCH 1/7] dinput: Allow Enumeration of joysticks with DirectX 3.
|
||||
|
||||
Star Wars: Rogue 3D requests a DirectX 3.0 version
|
||||
0108:trace:dinput:DirectInputCreateEx (0x400000,0300,{9a4cb684-236d-11d3-8e9d-00c04f6844ae},0x7acfa0,(nil))
|
||||
and then tries to interate over all Joysticks.
|
||||
|
||||
The current tests show that this is the correct behaviour,
|
||||
However,
|
||||
On windows (Steam version of above) uses a shim to allow joystick support.
|
||||
|
||||
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
---
|
||||
dlls/dinput/joystick_linux.c | 4 ++--
|
||||
dlls/dinput/joystick_linuxinput.c | 4 ++--
|
||||
dlls/dinput/joystick_osx.c | 4 ++--
|
||||
dlls/dinput/tests/joystick.c | 2 +-
|
||||
4 files changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/dlls/dinput/joystick_linux.c b/dlls/dinput/joystick_linux.c
|
||||
index d661a14..22f7d3b 100644
|
||||
--- a/dlls/dinput/joystick_linux.c
|
||||
+++ b/dlls/dinput/joystick_linux.c
|
||||
@@ -377,7 +377,7 @@ static HRESULT joydev_enum_deviceA(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINS
|
||||
}
|
||||
|
||||
if ((dwDevType == 0) ||
|
||||
- ((dwDevType == DIDEVTYPE_JOYSTICK) && (version > 0x0300 && version < 0x0800)) ||
|
||||
+ ((dwDevType == DIDEVTYPE_JOYSTICK) && (version >= 0x0300 && version < 0x0800)) ||
|
||||
(((dwDevType == DI8DEVCLASS_GAMECTRL) || (dwDevType == DI8DEVTYPE_JOYSTICK)) && (version >= 0x0800))) {
|
||||
/* check whether we have a joystick */
|
||||
if ((fd = open(joystick_devices[id].device, O_RDONLY)) == -1)
|
||||
@@ -406,7 +406,7 @@ static HRESULT joydev_enum_deviceW(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINS
|
||||
}
|
||||
|
||||
if ((dwDevType == 0) ||
|
||||
- ((dwDevType == DIDEVTYPE_JOYSTICK) && (version > 0x0300 && version < 0x0800)) ||
|
||||
+ ((dwDevType == DIDEVTYPE_JOYSTICK) && (version >= 0x0300 && version < 0x0800)) ||
|
||||
(((dwDevType == DI8DEVCLASS_GAMECTRL) || (dwDevType == DI8DEVTYPE_JOYSTICK)) && (version >= 0x0800))) {
|
||||
/* check whether we have a joystick */
|
||||
if ((fd = open(joystick_devices[id].device, O_RDONLY)) == -1)
|
||||
diff --git a/dlls/dinput/joystick_linuxinput.c b/dlls/dinput/joystick_linuxinput.c
|
||||
index 3580505..fb6b305 100644
|
||||
--- a/dlls/dinput/joystick_linuxinput.c
|
||||
+++ b/dlls/dinput/joystick_linuxinput.c
|
||||
@@ -412,7 +412,7 @@ static HRESULT joydev_enum_deviceA(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINS
|
||||
}
|
||||
|
||||
if (!((dwDevType == 0) ||
|
||||
- ((dwDevType == DIDEVTYPE_JOYSTICK) && (version > 0x0300 && version < 0x0800)) ||
|
||||
+ ((dwDevType == DIDEVTYPE_JOYSTICK) && (version >= 0x0300 && version < 0x0800)) ||
|
||||
(((dwDevType == DI8DEVCLASS_GAMECTRL) || (dwDevType == DI8DEVTYPE_JOYSTICK)) && (version >= 0x0800))))
|
||||
return S_FALSE;
|
||||
|
||||
@@ -437,7 +437,7 @@ static HRESULT joydev_enum_deviceW(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINS
|
||||
}
|
||||
|
||||
if (!((dwDevType == 0) ||
|
||||
- ((dwDevType == DIDEVTYPE_JOYSTICK) && (version > 0x0300 && version < 0x0800)) ||
|
||||
+ ((dwDevType == DIDEVTYPE_JOYSTICK) && (version >= 0x0300 && version < 0x0800)) ||
|
||||
(((dwDevType == DI8DEVCLASS_GAMECTRL) || (dwDevType == DI8DEVTYPE_JOYSTICK)) && (version >= 0x0800))))
|
||||
return S_FALSE;
|
||||
|
||||
diff --git a/dlls/dinput/joystick_osx.c b/dlls/dinput/joystick_osx.c
|
||||
index 4259d1a..3b7a7f0 100644
|
||||
--- a/dlls/dinput/joystick_osx.c
|
||||
+++ b/dlls/dinput/joystick_osx.c
|
||||
@@ -955,7 +955,7 @@ static HRESULT joydev_enum_deviceA(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINS
|
||||
device = get_device_ref(id);
|
||||
|
||||
if ((dwDevType == 0) ||
|
||||
- ((dwDevType == DIDEVTYPE_JOYSTICK) && (version > 0x0300 && version < 0x0800)) ||
|
||||
+ ((dwDevType == DIDEVTYPE_JOYSTICK) && (version >= 0x0300 && version < 0x0800)) ||
|
||||
(((dwDevType == DI8DEVCLASS_GAMECTRL) || (dwDevType == DI8DEVTYPE_JOYSTICK)) && (version >= 0x0800)))
|
||||
{
|
||||
if (dwFlags & DIEDFL_FORCEFEEDBACK) {
|
||||
@@ -1002,7 +1002,7 @@ static HRESULT joydev_enum_deviceW(DWORD dwDevType, DWORD dwFlags, LPDIDEVICEINS
|
||||
device = get_device_ref(id);
|
||||
|
||||
if ((dwDevType == 0) ||
|
||||
- ((dwDevType == DIDEVTYPE_JOYSTICK) && (version > 0x0300 && version < 0x0800)) ||
|
||||
+ ((dwDevType == DIDEVTYPE_JOYSTICK) && (version >= 0x0300 && version < 0x0800)) ||
|
||||
(((dwDevType == DI8DEVCLASS_GAMECTRL) || (dwDevType == DI8DEVTYPE_JOYSTICK)) && (version >= 0x0800))) {
|
||||
|
||||
if (dwFlags & DIEDFL_FORCEFEEDBACK) {
|
||||
diff --git a/dlls/dinput/tests/joystick.c b/dlls/dinput/tests/joystick.c
|
||||
index 631ea57..c07e821 100644
|
||||
--- a/dlls/dinput/tests/joystick.c
|
||||
+++ b/dlls/dinput/tests/joystick.c
|
||||
@@ -321,7 +321,7 @@ static BOOL CALLBACK EnumJoysticks(const DIDEVICEINSTANCEA *lpddi, void *pvRef)
|
||||
DIPROPDWORD dip_gain_set, dip_gain_get;
|
||||
struct effect_enum effect_data;
|
||||
|
||||
- ok(data->version > 0x0300, "Joysticks not supported in version 0x%04x\n", data->version);
|
||||
+ ok(data->version >= 0x0300, "Joysticks not supported in version 0x%04x\n", data->version);
|
||||
|
||||
hr = IDirectInput_CreateDevice(data->pDI, &lpddi->guidInstance, NULL, NULL);
|
||||
ok(hr==E_POINTER,"IDirectInput_CreateDevice() should have returned "
|
||||
--
|
||||
1.9.1
|
||||
|
@ -0,0 +1,183 @@
|
||||
From 767f65c97a00ea8418f0c8309c0759a16b8b5e88 Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Sun, 28 Apr 2019 10:24:07 +0000
|
||||
Subject: [PATCH 2/7] dinput: Don't return unsupported interfaces.
|
||||
|
||||
Supersedes 163790.
|
||||
|
||||
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
---
|
||||
dlls/dinput/dinput_main.c | 50 ++++++++++++++++-----------------------------
|
||||
dlls/dinput/tests/dinput.c | 21 ++++---------------
|
||||
dlls/dinput8/tests/dinput.c | 28 ++++++++-----------------
|
||||
3 files changed, 30 insertions(+), 69 deletions(-)
|
||||
|
||||
diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c
|
||||
index 9e837bd..7bf067f 100644
|
||||
--- a/dlls/dinput/dinput_main.c
|
||||
+++ b/dlls/dinput/dinput_main.c
|
||||
@@ -566,53 +566,39 @@ static HRESULT WINAPI IDirectInputAImpl_QueryInterface(LPDIRECTINPUT7A iface, RE
|
||||
if (!riid || !ppobj)
|
||||
return E_POINTER;
|
||||
|
||||
+ *ppobj = NULL;
|
||||
+
|
||||
+#if DIRECTINPUT_VERSION == 0x0700
|
||||
if (IsEqualGUID( &IID_IUnknown, riid ) ||
|
||||
- IsEqualGUID( &IID_IDirectInputA, riid ) ||
|
||||
- IsEqualGUID( &IID_IDirectInput2A, riid ) ||
|
||||
- IsEqualGUID( &IID_IDirectInput7A, riid ))
|
||||
- {
|
||||
+ IsEqualGUID( &IID_IDirectInputA, riid ) ||
|
||||
+ IsEqualGUID( &IID_IDirectInput2A, riid ) ||
|
||||
+ IsEqualGUID( &IID_IDirectInput7A, riid ))
|
||||
*ppobj = &This->IDirectInput7A_iface;
|
||||
- IUnknown_AddRef( (IUnknown*)*ppobj );
|
||||
-
|
||||
- return DI_OK;
|
||||
- }
|
||||
-
|
||||
- if (IsEqualGUID( &IID_IDirectInputW, riid ) ||
|
||||
- IsEqualGUID( &IID_IDirectInput2W, riid ) ||
|
||||
- IsEqualGUID( &IID_IDirectInput7W, riid ))
|
||||
- {
|
||||
+ else if (IsEqualGUID( &IID_IDirectInputW, riid ) ||
|
||||
+ IsEqualGUID( &IID_IDirectInput2W, riid ) ||
|
||||
+ IsEqualGUID( &IID_IDirectInput7W, riid ))
|
||||
*ppobj = &This->IDirectInput7W_iface;
|
||||
- IUnknown_AddRef( (IUnknown*)*ppobj );
|
||||
|
||||
- return DI_OK;
|
||||
- }
|
||||
-
|
||||
- if (IsEqualGUID( &IID_IDirectInput8A, riid ))
|
||||
- {
|
||||
+#else
|
||||
+ if (IsEqualGUID( &IID_IUnknown, riid ) ||
|
||||
+ IsEqualGUID( &IID_IDirectInput8A, riid ))
|
||||
*ppobj = &This->IDirectInput8A_iface;
|
||||
- IUnknown_AddRef( (IUnknown*)*ppobj );
|
||||
-
|
||||
- return DI_OK;
|
||||
- }
|
||||
|
||||
- if (IsEqualGUID( &IID_IDirectInput8W, riid ))
|
||||
- {
|
||||
+ else if (IsEqualGUID( &IID_IDirectInput8W, riid ))
|
||||
*ppobj = &This->IDirectInput8W_iface;
|
||||
- IUnknown_AddRef( (IUnknown*)*ppobj );
|
||||
|
||||
- return DI_OK;
|
||||
- }
|
||||
+#endif
|
||||
|
||||
if (IsEqualGUID( &IID_IDirectInputJoyConfig8, riid ))
|
||||
- {
|
||||
*ppobj = &This->IDirectInputJoyConfig8_iface;
|
||||
- IUnknown_AddRef( (IUnknown*)*ppobj );
|
||||
|
||||
+ if(*ppobj)
|
||||
+ {
|
||||
+ IUnknown_AddRef( (IUnknown*)*ppobj );
|
||||
return DI_OK;
|
||||
}
|
||||
|
||||
- FIXME( "Unsupported interface: %s\n", debugstr_guid(riid));
|
||||
- *ppobj = NULL;
|
||||
+ WARN( "Unsupported interface: %s\n", debugstr_guid(riid));
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
diff --git a/dlls/dinput/tests/dinput.c b/dlls/dinput/tests/dinput.c
|
||||
index 23b20d2..6451241 100644
|
||||
--- a/dlls/dinput/tests/dinput.c
|
||||
+++ b/dlls/dinput/tests/dinput.c
|
||||
@@ -272,11 +272,10 @@ static void test_QueryInterface(void)
|
||||
static const struct
|
||||
{
|
||||
REFIID riid;
|
||||
- int test_todo;
|
||||
} no_interface_list[] =
|
||||
{
|
||||
- {&IID_IDirectInput8A, 1},
|
||||
- {&IID_IDirectInput8W, 1},
|
||||
+ {&IID_IDirectInput8A},
|
||||
+ {&IID_IDirectInput8W},
|
||||
{&IID_IDirectInputDeviceA},
|
||||
{&IID_IDirectInputDeviceW},
|
||||
{&IID_IDirectInputDevice2A},
|
||||
@@ -324,20 +323,8 @@ static void test_QueryInterface(void)
|
||||
{
|
||||
pUnk = (void *)0xdeadbeef;
|
||||
hr = IDirectInput_QueryInterface(pDI, no_interface_list[i].riid, (void **)&pUnk);
|
||||
- if (no_interface_list[i].test_todo)
|
||||
- {
|
||||
- todo_wine
|
||||
- ok(hr == E_NOINTERFACE, "[%d] IDirectInput_QueryInterface returned 0x%08x\n", i, hr);
|
||||
- todo_wine
|
||||
- ok(pUnk == NULL, "[%d] Output interface pointer is %p\n", i, pUnk);
|
||||
-
|
||||
- if (pUnk) IUnknown_Release(pUnk);
|
||||
- }
|
||||
- else
|
||||
- {
|
||||
- ok(hr == E_NOINTERFACE, "[%d] IDirectInput_QueryInterface returned 0x%08x\n", i, hr);
|
||||
- ok(pUnk == NULL, "[%d] Output interface pointer is %p\n", i, pUnk);
|
||||
- }
|
||||
+ ok(hr == E_NOINTERFACE, "[%d] IDirectInput_QueryInterface returned 0x%08x\n", i, hr);
|
||||
+ ok(pUnk == NULL, "[%d] Output interface pointer is %p\n", i, pUnk);
|
||||
}
|
||||
|
||||
IDirectInput_Release(pDI);
|
||||
diff --git a/dlls/dinput8/tests/dinput.c b/dlls/dinput8/tests/dinput.c
|
||||
index 28b1bd5..d87f997 100644
|
||||
--- a/dlls/dinput8/tests/dinput.c
|
||||
+++ b/dlls/dinput8/tests/dinput.c
|
||||
@@ -225,15 +225,14 @@ static void test_QueryInterface(void)
|
||||
static const struct
|
||||
{
|
||||
REFIID riid;
|
||||
- int test_todo;
|
||||
} no_interface_list[] =
|
||||
{
|
||||
- {&IID_IDirectInputA, 1},
|
||||
- {&IID_IDirectInputW, 1},
|
||||
- {&IID_IDirectInput2A, 1},
|
||||
- {&IID_IDirectInput2W, 1},
|
||||
- {&IID_IDirectInput7A, 1},
|
||||
- {&IID_IDirectInput7W, 1},
|
||||
+ {&IID_IDirectInputA},
|
||||
+ {&IID_IDirectInputW},
|
||||
+ {&IID_IDirectInput2A},
|
||||
+ {&IID_IDirectInput2W},
|
||||
+ {&IID_IDirectInput7A},
|
||||
+ {&IID_IDirectInput7W},
|
||||
{&IID_IDirectInputDeviceA},
|
||||
{&IID_IDirectInputDeviceW},
|
||||
{&IID_IDirectInputDevice2A},
|
||||
@@ -293,20 +292,9 @@ static void test_QueryInterface(void)
|
||||
{
|
||||
pUnk = (void *)0xdeadbeef;
|
||||
hr = IDirectInput8_QueryInterface(pDI, no_interface_list[i].riid, (void **)&pUnk);
|
||||
- if (no_interface_list[i].test_todo)
|
||||
- {
|
||||
- todo_wine
|
||||
- ok(hr == E_NOINTERFACE, "[%d] IDirectInput8_QueryInterface returned 0x%08x\n", i, hr);
|
||||
- todo_wine
|
||||
- ok(pUnk == NULL, "[%d] Output interface pointer is %p\n", i, pUnk);
|
||||
|
||||
- if (pUnk) IUnknown_Release(pUnk);
|
||||
- }
|
||||
- else
|
||||
- {
|
||||
- ok(hr == E_NOINTERFACE, "[%d] IDirectInput8_QueryInterface returned 0x%08x\n", i, hr);
|
||||
- ok(pUnk == NULL, "[%d] Output interface pointer is %p\n", i, pUnk);
|
||||
- }
|
||||
+ ok(hr == E_NOINTERFACE, "[%d] IDirectInput8_QueryInterface returned 0x%08x\n", i, hr);
|
||||
+ ok(pUnk == NULL, "[%d] Output interface pointer is %p\n", i, pUnk);
|
||||
}
|
||||
|
||||
IDirectInput8_Release(pDI);
|
||||
--
|
||||
1.9.1
|
||||
|
@ -0,0 +1,27 @@
|
||||
From 7b59e0a7d0962899762b5b7a466d16b97d771df2 Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Sat, 27 Apr 2019 12:53:06 +1000
|
||||
Subject: [PATCH 3/7] dinput: Return E_NOINTERFACE from IDirectInputDevice2
|
||||
QueryInterface
|
||||
|
||||
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
---
|
||||
dlls/dinput/device.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/dinput/device.c b/dlls/dinput/device.c
|
||||
index 63eb868..1317e91 100644
|
||||
--- a/dlls/dinput/device.c
|
||||
+++ b/dlls/dinput/device.c
|
||||
@@ -1257,7 +1257,7 @@ HRESULT WINAPI IDirectInputDevice2WImpl_QueryInterface(LPDIRECTINPUTDEVICE8W ifa
|
||||
}
|
||||
|
||||
WARN("Unsupported interface!\n");
|
||||
- return E_FAIL;
|
||||
+ return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
HRESULT WINAPI IDirectInputDevice2AImpl_QueryInterface(LPDIRECTINPUTDEVICE8A iface, REFIID riid, LPVOID *ppobj)
|
||||
--
|
||||
1.9.1
|
||||
|
@ -0,0 +1,28 @@
|
||||
From 1b1158f85ae61f348207460ce98b1977eee79b66 Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Sat, 27 Apr 2019 13:10:01 +1000
|
||||
Subject: [PATCH 4/7] dinput: Dont report we cannot open a device
|
||||
|
||||
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
---
|
||||
dlls/dinput/joystick_linuxinput.c | 3 ---
|
||||
1 file changed, 3 deletions(-)
|
||||
|
||||
diff --git a/dlls/dinput/joystick_linuxinput.c b/dlls/dinput/joystick_linuxinput.c
|
||||
index fb6b305..7343a50 100644
|
||||
--- a/dlls/dinput/joystick_linuxinput.c
|
||||
+++ b/dlls/dinput/joystick_linuxinput.c
|
||||
@@ -219,10 +219,7 @@ static void find_joydevs(void)
|
||||
}
|
||||
|
||||
if (fd == -1)
|
||||
- {
|
||||
- WARN("Failed to open \"%s\": %d %s\n", buf, errno, strerror(errno));
|
||||
continue;
|
||||
- }
|
||||
|
||||
if (ioctl(fd, EVIOCGBIT(0, sizeof(joydev.evbits)), joydev.evbits) == -1)
|
||||
{
|
||||
--
|
||||
1.9.1
|
||||
|
@ -0,0 +1,29 @@
|
||||
From 0e363558e654e25546127effe43a07c2b2038c9b Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Sat, 27 Apr 2019 13:23:46 +1000
|
||||
Subject: [PATCH 5/7] dinput: Improve EnumDevice tracing
|
||||
|
||||
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
---
|
||||
dlls/dinput/dinput_main.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/dinput/dinput_main.c b/dlls/dinput/dinput_main.c
|
||||
index 7bf067f..4b41b71 100644
|
||||
--- a/dlls/dinput/dinput_main.c
|
||||
+++ b/dlls/dinput/dinput_main.c
|
||||
@@ -467,9 +467,10 @@ static HRESULT WINAPI IDirectInputAImpl_EnumDevices(
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(dinput_devices); i++) {
|
||||
if (!dinput_devices[i]->enum_deviceA) continue;
|
||||
+
|
||||
+ TRACE(" Checking device %u ('%s')\n", i, dinput_devices[i]->name);
|
||||
for (j = 0, r = S_OK; SUCCEEDED(r); j++) {
|
||||
devInstance.dwSize = sizeof(devInstance);
|
||||
- TRACE(" - checking device %u ('%s')\n", i, dinput_devices[i]->name);
|
||||
r = dinput_devices[i]->enum_deviceA(dwDevType, dwFlags, &devInstance, This->dwVersion, j);
|
||||
if (r == S_OK)
|
||||
if (enum_callback_wrapper(lpCallback, &devInstance, pvRef) == DIENUM_STOP)
|
||||
--
|
||||
1.9.1
|
||||
|
@ -0,0 +1,79 @@
|
||||
From e5eb27de156f7d250755fb3070c419e28e9d1957 Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Sun, 28 Apr 2019 12:11:56 +1000
|
||||
Subject: [PATCH 6/7] dinput: Support DIDEVICEINSTANCE_DX3 for Mouse
|
||||
GetDeviceInfo
|
||||
|
||||
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
---
|
||||
dlls/dinput/mouse.c | 5 -----
|
||||
dlls/dinput/tests/mouse.c | 30 ++++++++++++++++++++++++++++++
|
||||
2 files changed, 30 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/dlls/dinput/mouse.c b/dlls/dinput/mouse.c
|
||||
index 0adba03..1e2b1d1 100644
|
||||
--- a/dlls/dinput/mouse.c
|
||||
+++ b/dlls/dinput/mouse.c
|
||||
@@ -765,11 +765,6 @@ static HRESULT WINAPI SysMouseAImpl_GetDeviceInfo(
|
||||
SysMouseImpl *This = impl_from_IDirectInputDevice8A(iface);
|
||||
TRACE("(this=%p,%p)\n", This, pdidi);
|
||||
|
||||
- if (pdidi->dwSize != sizeof(DIDEVICEINSTANCEA)) {
|
||||
- WARN(" dinput3 not supported yet...\n");
|
||||
- return DI_OK;
|
||||
- }
|
||||
-
|
||||
fill_mouse_dideviceinstanceA(pdidi, This->base.dinput->dwVersion);
|
||||
|
||||
return DI_OK;
|
||||
diff --git a/dlls/dinput/tests/mouse.c b/dlls/dinput/tests/mouse.c
|
||||
index c2d0226..c1a7ff7 100644
|
||||
--- a/dlls/dinput/tests/mouse.c
|
||||
+++ b/dlls/dinput/tests/mouse.c
|
||||
@@ -198,6 +198,35 @@ static void test_acquire(IDirectInputA *pDI, HWND hwnd)
|
||||
DestroyWindow( hwnd2 );
|
||||
}
|
||||
|
||||
+static void test_GetDeviceInfo(IDirectInputA *pDI)
|
||||
+{
|
||||
+ HRESULT hr;
|
||||
+ IDirectInputDeviceA *pMouse = NULL;
|
||||
+ DIDEVICEINSTANCEA instA;
|
||||
+ DIDEVICEINSTANCE_DX3A inst3A;
|
||||
+
|
||||
+ hr = IDirectInput_CreateDevice(pDI, &GUID_SysMouse, &pMouse, NULL);
|
||||
+ ok(SUCCEEDED(hr), "IDirectInput_CreateDevice() failed: %08x\n", hr);
|
||||
+ if (FAILED(hr)) return;
|
||||
+
|
||||
+ instA.dwSize = sizeof(instA);
|
||||
+ hr = IDirectInputDevice_GetDeviceInfo(pMouse, &instA);
|
||||
+ ok(SUCCEEDED(hr), "got %08x\n", hr);
|
||||
+
|
||||
+ inst3A.dwSize = sizeof(inst3A);
|
||||
+ hr = IDirectInputDevice_GetDeviceInfo(pMouse, (DIDEVICEINSTANCEA *)&inst3A);
|
||||
+ ok(SUCCEEDED(hr), "got %08x\n", hr);
|
||||
+
|
||||
+ ok(instA.dwSize != inst3A.dwSize, "got %d, %d \n", instA.dwSize, inst3A.dwSize);
|
||||
+ ok(IsEqualGUID(&instA.guidInstance, &inst3A.guidInstance), "got %s, %s\n",
|
||||
+ wine_dbgstr_guid(&instA.guidInstance), wine_dbgstr_guid(&inst3A.guidInstance) );
|
||||
+ ok(IsEqualGUID(&instA.guidProduct, &inst3A.guidProduct), "got %s, %s\n",
|
||||
+ wine_dbgstr_guid(&instA.guidProduct), wine_dbgstr_guid(&inst3A.guidProduct) );
|
||||
+ ok(instA.dwDevType == inst3A.dwDevType, "got %d, %d\n", instA.dwDevType, inst3A.dwDevType);
|
||||
+
|
||||
+ if (pMouse) IUnknown_Release(pMouse);
|
||||
+}
|
||||
+
|
||||
static void mouse_tests(void)
|
||||
{
|
||||
HRESULT hr;
|
||||
@@ -224,6 +253,7 @@ static void mouse_tests(void)
|
||||
|
||||
test_set_coop(pDI, hwnd);
|
||||
test_acquire(pDI, hwnd);
|
||||
+ test_GetDeviceInfo(pDI);
|
||||
|
||||
DestroyWindow(hwnd);
|
||||
}
|
||||
--
|
||||
1.9.1
|
||||
|
2
patches/dinput-joy-directX3/definition
Normal file
2
patches/dinput-joy-directX3/definition
Normal file
@ -0,0 +1,2 @@
|
||||
Fixes: [36764] dinput: Allow DirectX version 3 to enumerate joysticks.
|
||||
# Other cleanups for dinput.
|
@ -130,6 +130,7 @@ patch_enable_all ()
|
||||
enable_ddraw_Write_Vtable="$1"
|
||||
enable_ddraw_version_check="$1"
|
||||
enable_dinput_axis_recalc="$1"
|
||||
enable_dinput_joy_directX3="$1"
|
||||
enable_dinput_joy_mappings="$1"
|
||||
enable_dinput_reconnect_joystick="$1"
|
||||
enable_dinput_remap_joystick="$1"
|
||||
@ -523,6 +524,9 @@ patch_enable ()
|
||||
dinput-axis-recalc)
|
||||
enable_dinput_axis_recalc="$2"
|
||||
;;
|
||||
dinput-joy-directX3)
|
||||
enable_dinput_joy_directX3="$2"
|
||||
;;
|
||||
dinput-joy-mappings)
|
||||
enable_dinput_joy_mappings="$2"
|
||||
;;
|
||||
@ -3079,6 +3083,33 @@ if test "$enable_dinput_axis_recalc" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset dinput-joy-directX3
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#36764] dinput: Allow DirectX version 3 to enumerate joysticks.
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/dinput/device.c, dlls/dinput/dinput_main.c, dlls/dinput/joystick_linux.c, dlls/dinput/joystick_linuxinput.c,
|
||||
# | dlls/dinput/joystick_osx.c, dlls/dinput/mouse.c, dlls/dinput/tests/dinput.c, dlls/dinput/tests/joystick.c,
|
||||
# | dlls/dinput/tests/mouse.c, dlls/dinput8/tests/dinput.c
|
||||
# |
|
||||
if test "$enable_dinput_joy_directX3" -eq 1; then
|
||||
patch_apply dinput-joy-directX3/0001-dinput-Allow-Enumeration-of-joysticks-with-DirectX-3.patch
|
||||
patch_apply dinput-joy-directX3/0002-dinput-Don-t-return-unsupported-interfaces.patch
|
||||
patch_apply dinput-joy-directX3/0003-dinput-Return-E_NOINTERFACE-from-IDirectInputDevice2.patch
|
||||
patch_apply dinput-joy-directX3/0004-dinput-Dont-report-we-cannot-open-a-device.patch
|
||||
patch_apply dinput-joy-directX3/0005-dinput-Improve-EnumDevice-tracing.patch
|
||||
patch_apply dinput-joy-directX3/0006-dinput-Support-DIDEVICEINSTANCE_DX3-for-Mouse-GetDev.patch
|
||||
(
|
||||
printf '%s\n' '+ { "Alistair Leslie-Hughes", "dinput: Allow Enumeration of joysticks with DirectX 3.", 1 },';
|
||||
printf '%s\n' '+ { "Alistair Leslie-Hughes", "dinput: Don'\''t return unsupported interfaces.", 1 },';
|
||||
printf '%s\n' '+ { "Alistair Leslie-Hughes", "dinput: Return E_NOINTERFACE from IDirectInputDevice2 QueryInterface.", 1 },';
|
||||
printf '%s\n' '+ { "Alistair Leslie-Hughes", "dinput: Dont report we cannot open a device.", 1 },';
|
||||
printf '%s\n' '+ { "Alistair Leslie-Hughes", "dinput: Improve EnumDevice tracing.", 1 },';
|
||||
printf '%s\n' '+ { "Alistair Leslie-Hughes", "dinput: Support DIDEVICEINSTANCE_DX3 for Mouse GetDeviceInfo.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset dinput-joy-mappings
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
|
Loading…
x
Reference in New Issue
Block a user