On Wed Jul 15 11:38:49 CDT 2009 Michael Gruber wrote:
On Wed, Jul 15, 2009 at 17:37, Detlef Riekenberg<wine.dev at web.de> wrote:
On Do, 2009-07-09 at 12:50 +0200, Michael Gruber wrote:
On Thu, Jul 9, 2009 at 09:50, Stefan Dösinger<stefandoesinger at gmx.at> wrote:
Is it possible to implement XInput on top of DirectInput? DirectInput already has some internal abstraction layers for differnet joystick APIs, and has basic support for OSX joysticks.
I actually wrote an implementation on top of DirectInput earlier, but I ditched it since I couldn't get the features to work that I wanted.
Can it work the opposite way (DirectInput on top of XInput)?
--
By by ... Detlef
No, not even the Joystick part of DirectInput could be implemented on top of XInput for various reasons: For example DirectInput supports lots of ForceFeedback options while XInput supports only rumble. Also, the number of XInput devices is limited to 4.
So, whatever happened to these patches? Given my understanding and the discussion here, it seems like this is the way to go (drive XInput from e.g. evdev directly instead of layering it with DInput/WinMM).
I'm currently working to get gamepads/joysticks to work with a piece of software:
https://www.winehq.org/pipermail/wine-devel/2015-July/108254.html
I'm trying to determine if the software uses RawInput or XInput, which brought me to these patches. The snoop interface (and the undocumented SnoopInclude/Exclude and SnoopFromInclude/Exclude configurations) doesn't seem to be helpful here, though I may be mis-using it. [1]
Anyway, I'm about to test these patches on master and wanted to see if it's possible to include them in Wine if that work goes well.
[1] Using Snoop
With native XInput DLLs, I've tried setting SnoopInclude/SnoopFromInclude (with no Snoop*Exclude set) to 'xinput1_1;xinput1_2;xinput1_3;xinput1_4;xinput9_1_0' and 'xinput1_1.*;xinput1_2.*;xinput1_3.*;xinput1_4.*;xinput9_1_0.*', but the results are the same: no 'CALL/RET' logged from Snoop. (snoop uses capital CALL and RET in its logging, and I get none of these in my logs: http://source.winehq.org/git/wine.git/blob/HEAD:/dlls/ntdll/relay.c#l1083)
I've even tried WINEDEBUG=...,+snoop=xinput1_3 which also doesn't seem to output any logging other than the SNOOP_SetupDLL traces.
I see lots of GetModuleHandleA and GetProcAddress calls (and a few: Call/Ret PE DLL traces, but I think these are just from the loader/thread attachments: http://source.winehq.org/git/wine.git/blob/HEAD:/dlls/ntdll/loader.c#l1071). Does the use of GetProcAddress for these routines mean that Snoop won't be able to get in the middle? I see there is a SNOOP_GetProcAddress routine (called from ntdll/loader.c) which appears like it's supposed to support this GetProcAddress-wrapping, so I'm a bit confused.
Thanks,
-- Nate