Compare commits

...

6 Commits

Author SHA1 Message Date
Arkadiusz Hiler
4e124f0708 update vkd3d-proton to v2.5-104-g0f46a8a7 2022-01-25 18:02:04 +02:00
Arkadiusz Hiler
b11466a1bf update dxvk-nvapi to v0.5.1 2022-01-25 18:02:04 +02:00
Arkadiusz Hiler
8fa551be24 update dxvk to upstream v1.9.4
we can drop all the proton-specific customizations now that dxvk's dgxi
is the default one and wined3d interop is gone from vrclient
2022-01-25 18:02:04 +02:00
Andrew Eikum
0e7fac559a docs: Update CONTROLLERS for Wine 7.0 2022-01-25 18:02:04 +02:00
Arkadiusz Hiler
46a70516f5 Update wine 2022-01-25 18:02:04 +02:00
Esme Povirk
0c0c9f9c4e Update Wine Mono to 7.0.0. 2022-01-24 22:53:20 +02:00
8 changed files with 72 additions and 64 deletions

View File

@ -191,7 +191,7 @@ GECKO_VER := 2.47.2
GECKO32_TARBALL := wine-gecko-$(GECKO_VER)-x86.tar.xz
GECKO64_TARBALL := wine-gecko-$(GECKO_VER)-x86_64.tar.xz
WINEMONO_VER := 6.4.1
WINEMONO_VER := 7.0.0
WINEMONO_TARBALL := wine-mono-$(WINEMONO_VER)-x86.tar.xz
FONTS := $(SRCDIR)/fonts
@ -693,7 +693,6 @@ WINE_SOURCE_ARGS = \
WINE_CONFIGURE_ARGS = \
--with-mingw \
--without-xpresent \
--disable-tests
WINE_CONFIGURE_ARGS64 = --enable-win64

View File

@ -59,15 +59,13 @@ def setup_dll_symlinks(default_pfx_dir, dist_dir):
if os.path.isfile(filename) and file_is_wine_builtin_dll(filename):
bitness = dll_bitness(filename)
if bitness == 32:
libdir = os.path.join(dist_dir, 'lib/wine')
libdir = os.path.join(dist_dir, 'lib/wine/i386-windows')
elif bitness == 64:
libdir = os.path.join(dist_dir, 'lib64/wine')
libdir = os.path.join(dist_dir, 'lib64/wine/x86_64-windows')
else:
continue
if os.path.exists(os.path.join(libdir, file_)):
target = os.path.join(libdir, file_)
elif os.path.exists(os.path.join(libdir, 'fakedlls', file_)):
target = os.path.join(libdir, 'fakedlls', file_)
else:
continue
os.unlink(filename)

View File

@ -15,53 +15,68 @@ the game's behalf. This turns the raw HID protocol data into usable things like
buttons and joysticks.
dinput is a "legacy" API that allows applictions to talk to any type of
joystick. On Windows, it is likely implemented on top of HID. Notably, dinput
allows easy access to controllers that no other API does, so it is still used
by modern games despite being "legacy."
joystick. On Windows, it is implemented on top of HID. Notably, dinput allows
easy access to controllers that no other API does, so it is still used by
modern games despite being "legacy."
xinput is the new API that supports only Xbox controllers. On Windows, it is
likely implemented on top of rawinput, as Xbox controllers do not behave like
standard HID devices.
winmm is the very legacy API, for when joysticks were hooked up through the
soundcard. On modern Windows, it is likely implemented on top of hid.
soundcard. On modern Windows, it is implemented on top of dinput.
Here is a diagram for how these APIs are mapped down to the system by Proton:
--------
|game.exe|
--------
/ | | | | application
********|**|*|*|**|***********************
------ / | | | | wine
|xinput| | | | |
------ / | | |
| / | | |
--- / / | \
|hid|--- / | \
--- / | \
| / | \
-------- ------ -----
|rawinput| |dinput| |winmm|
-------- ------ -----
| | |
----------- | ----------------
|winebus.sys| | |winejoystick.drv|
----------- | ----------------
| \ / | wine
***|*********|***********|****************
\ | | linux
\ ---- |
\ |SDL2| |
\ ---- |
\ | \ |
\ | ---- |
\ | \ |
------ -----------
|hidraw| |input event|
------ -----------
----------
| game.exe |
----------
/ | | | \
/ | | | \ application
*********/****|*|**|****\******************
| | | \ \ wine
| | | | \
------ | | ----- \
|xinput| | | |winmm| |
------ | | ----- |
| | \ | |
| | | | |
\ | ------ |
\ | |dinput| |
\ | ------ /
| | / /
| | | /
--- /
|hid| /
--- /
| /
| |
--------
|rawinput|
--------
|
-----------
|winebus.sys|
-----------
| | wine
************|******|***********************
| | linux
| ----
| |SDL2|
| ----
| | \
| | \
| | |
------ -----------
|hidraw| |input event|
------ -----------
| |
\ /
========
|hardware|
========
Some things to note:
@ -74,7 +89,7 @@ other) protocol can talk directly to those devices.
Xbox controllers do not speak real HID. Instead Windows provides a HID
compatibility layer so dinput, which is implemented on top of HID, will present
the Xbox controller to legacy games. Of course some games (Unity) have noticed
that, and talk directly to this internal HID interface, so we had to duplicate
that, and talk directly to this internal HID interface, so we need to duplicate
it bit-for-bit in winebus.sys.
Some games support talking directly to certain controller types. For example,
@ -98,16 +113,3 @@ device for your controller, especially if it is a less well-known controller.
In those cases, we access it through SDL2 via its linux js backend and try to
treat it as an Xbox controller, even if it is not mapped with the Steam client
mapping feature.
Future improvements:
winmm's joystick APIs should be implemented on top of HID so it can use the
Steam controller mapping feature via winebus/SDL2.
xinput should be implemented on top of rawinput, as the Xbox HID compatibility
layer does not provide all of the features xinput requires. We currently use a
hack to work around this.
dinput should be implemented on top of HID, so we can avoid the code
duplication we have now with both winebus and dinput using SDL2 directly.

2
dxvk

@ -1 +1 @@
Subproject commit 78ef4cfd92cb7f448292aaca83091914ab271257
Subproject commit 1216466be7917ea9336cf3172a4d119a4c9f97f2

@ -1 +1 @@
Subproject commit acbcf35e327f2d189e1a9322bc1359a22d36cf6a
Subproject commit e23d450316521d22cc37b0f66b2d5778e63596ee

17
proton
View File

@ -31,7 +31,7 @@ from random import randrange
#To enable debug logging, copy "user_settings.sample.py" to "user_settings.py"
#and edit it if needed.
CURRENT_PREFIX_VERSION="6.3-3"
CURRENT_PREFIX_VERSION="7.0-100"
PFX="Proton: "
ld_path_var = "LD_LIBRARY_PATH"
@ -58,7 +58,16 @@ def log(msg):
def file_is_wine_builtin_dll(path):
if os.path.islink(path):
contents = os.readlink(path)
if os.path.dirname(contents).endswith(('/lib/wine/i386-unix', '/lib/wine/i386-windows', '/lib64/wine/x86_64-unix', '/lib64/wine/x86_64-windows')):
if os.path.dirname(contents).endswith((
'/lib/wine',
'/lib64/wine',
'/lib/wine/fakedlls',
'/lib64/wine/fakedlls',
'/lib/wine/i386-unix',
'/lib/wine/i386-windows',
'/lib64/wine/x86_64-unix',
'/lib64/wine/x86_64-windows'
)):
# This may be a broken link to a dll in a removed Proton install
return True
if not os.path.exists(path):
@ -830,10 +839,10 @@ class CompatData:
prefix=self.prefix_dir, track_file=tracked_files, link_debug=True)
if use_wined3d:
dxvkfiles = ["dxvk_config"]
dxvkfiles = []
wined3dfiles = ["d3d11", "d3d10", "d3d10core", "d3d10_1", "d3d9"]
else:
dxvkfiles = ["dxvk_config", "d3d11", "d3d10core", "d3d9"]
dxvkfiles = ["d3d11", "d3d10core", "d3d9"]
wined3dfiles = []
if use_dxvk_dxgi:

@ -1 +1 @@
Subproject commit c0a3fa8adc589454a05ee2dd28430cae73b67890
Subproject commit 1409ebab1f661cfaa88e90d5ec5300e881e5c583

2
wine

@ -1 +1 @@
Subproject commit f0b3d09ad69ddfc27dbd850bd6b365da6683fa08
Subproject commit 8978dc4043cc9afe26a2a0fb4dd67fcd9fc364c9