Compare commits

...

30 Commits

Author SHA1 Message Date
Andrew Eikum
c7b27f6faf update dxvk 2021-07-23 16:14:44 -05:00
Andrew Eikum
4ed2f6b3f5 update wine 2021-07-23 14:34:57 -05:00
Andrew Eikum
46a5b82b42 update vkd3d-proton to v2.4-2-g6fd564db 2021-07-23 14:34:57 -05:00
Andrew Eikum
e38ee87f29 update dxvk to v1.9-58-ged24c17d 2021-07-19 09:31:38 -05:00
Andrew Eikum
5eed0520ad update wine 2021-07-19 09:15:12 -05:00
Esme Povirk
aa55eeba6e Update Wine Mono to 6.2.2. 2021-07-19 08:58:19 -05:00
Giovanni Mascellani
53c423a172
Build a fake Malgun Gothic font. 2021-07-19 12:46:06 +02:00
Giovanni Mascellani
83beb8f724
Add Korean version of SourceHanSans font. 2021-07-19 12:46:06 +02:00
Giovanni Mascellani
2f3b330622
Build a fake MS Gothic font. 2021-07-19 12:46:06 +02:00
Giovanni Mascellani
72a3cf5808
Add Japanese version of SourceHanSans font. 2021-07-19 12:46:05 +02:00
Giovanni Mascellani
71bc07d080
Build a fake SimSun font. 2021-07-19 12:46:05 +02:00
Giovanni Mascellani
eab998fcd3
Prepare for compiling different SourceHanSans fonts. 2021-07-19 12:46:05 +02:00
Paul Gofman
1e0b6d5616 vrclient: HACK: Fixup digital action 'bChange' paramter on 32 bit. 2021-07-12 14:50:40 +03:00
Paul Gofman
aa0fbb9bf6 vrclient: Fixup size for structs with matching field offsets but mismatched size. 2021-07-12 14:50:40 +03:00
Andrew Eikum
b2e81d6b62 update wine 2021-07-09 08:49:20 -05:00
Andrew Eikum
053adfa8dc vkd3d-proton: Update to v2.4 2021-07-08 10:42:05 -05:00
Rémi Bernon
a1c7137bd8
update wine 2021-06-29 20:50:15 +02:00
Esme Povirk
a7580816c3 Update Wine Mono to 6.2.1. 2021-06-29 13:06:26 -05:00
Andrew Eikum
b5d5d895ba update wine 2021-06-25 09:49:33 -05:00
Liam Middlebrook
e0cc68f311 proton: Copy DLLs provided by the NVIDIA driver into prefix
The upcoming NVIDIA 470 driver series will introduce a DLL (nvngx.dll)
for the support of NVIDIA DLSS in Proton. This change adds logic for
discovering the location of DLL files provided by the NVIDIA driver, and
copies them to C:\Windows\System32\

Reviewed-by: Adam Moss <amoss@nvidia.com>
2021-06-25 09:33:57 -05:00
Liam Middlebrook
b5f3c21d68 dxvk-nvapi: Add to Proton
Add https://github.com/jp7677/dxvk-nvapi as a submodule. dxvk-nvapi will
not be copied into Proton prefixes by default, but instead will be
controlled via the environment variable PROTON_ENABLE_NVAPI. This is
done to avoid any potential adverse effects of the nvapi DLL existing
in cases where an application may require a function that is not
implemented by dxvk-nvapi.

This new functionality can be enabled by setting the following environment
variable to a value of `1`:
    `PROTON_ENABLE_NVAPI`

This functionality is needed in order to support DLSS within Proton.

Reviewed-by: Adam Moss <amoss@nvidia.com>
2021-06-25 09:32:27 -05:00
Giovanni Mascellani
0cebe88f1e docker: Install Capstone development files. 2021-06-25 09:32:04 -05:00
Rémi Bernon
fea280bca7 docker: Add python3-pefile package to SDK image. 2021-06-25 09:32:04 -05:00
Rémi Bernon
11979b98b7 docker: Don't install tini, it's already there now. 2021-06-25 09:32:04 -05:00
Rémi Bernon
0c108269f6 docker: Install libxpresent-dev packages. 2021-06-25 09:32:04 -05:00
Rémi Bernon
03d891e51a docker: Bump steamrt version to 0.20210505.0. 2021-06-25 09:32:04 -05:00
Andrew Eikum
92c04a6f4c Handle steampipe quirks in deploy builds 2021-06-25 09:32:04 -05:00
Andrew Eikum
8ac3356904 Don't ship filenames with colons in them 2021-06-25 09:32:04 -05:00
Andrew Eikum
740d99130b Don't ship proton dist files in a tarball anymore 2021-06-25 09:32:04 -05:00
Rémi Bernon
7a42fab891 build: Cleanup target directories before building.
And force copy artifacts after.
2021-06-25 09:32:04 -05:00
40 changed files with 345153 additions and 96 deletions

3
.gitmodules vendored
View File

@ -31,3 +31,6 @@
[submodule "OpenXR-SDK"]
path = OpenXR-SDK
url = https://github.com/KhronosGroup/OpenXR-SDK
[submodule "dxvk-nvapi"]
path = dxvk-nvapi
url = https://github.com/jp7677/dxvk-nvapi

View File

@ -145,19 +145,24 @@ install-internal: downloads
install: install-internal
mkdir -p $(STEAM_DIR)/compatibilitytools.d/
rm -rf $(STEAM_DIR)/compatibilitytools.d/$(_build_name)/files/ #remove proton's internal files, but preserve user_settings etc from top-level
cp -Rf --no-dereference --preserve=mode,links vagrant_share/compatibilitytools.d/$(_build_name) $(STEAM_DIR)/compatibilitytools.d/
echo "Proton installed to your local Steam installation"
redist: | vagrant_share/$(DEPLOY_DIR)
redist: private SHELL := $(VAGRANT_SHELL)
redist: downloads
$(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) $(CCACHE_FLAG) redist && cp $(BUILD_DIR)/redist/* /vagrant/$(DEPLOY_DIR) && \
rm -rf /vagrant/$(DEPLOY_DIR)/* && \
$(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) $(CCACHE_FLAG) redist && \
cp -Rf $(BUILD_DIR)/redist/* /vagrant/$(DEPLOY_DIR) && \
echo "Proton build available at vagrant_share/$(DEPLOY_DIR)"
deploy: | vagrant_share/$(DEPLOY_DIR)-deploy
deploy: private SHELL := $(VAGRANT_SHELL)
deploy: downloads
$(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) $(CCACHE_FLAG) deploy && cp $(BUILD_DIR)/deploy/* /vagrant/$(DEPLOY_DIR)-deploy && \
rm -rf /vagrant/$(DEPLOY_DIR)-deploy/* && \
$(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) $(CCACHE_FLAG) deploy && \
cp -Rf $(BUILD_DIR)/deploy/* /vagrant/$(DEPLOY_DIR)-deploy && \
echo "Proton deployed to vagrant_share/$(DEPLOY_DIR)-deploy"
module: | vagrant_share/$(module)/lib/wine/
@ -176,39 +181,47 @@ dxvk: | vagrant_share/dxvk/lib64/wine/dxvk
dxvk: private SHELL := $(VAGRANT_SHELL)
dxvk: downloads
$(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) $(CCACHE_FLAG) dxvk && \
cp -f $(BUILD_DIR)/dist/dist/lib/wine/dxvk/*.dll /vagrant/dxvk/lib/wine/dxvk/ && \
cp -f $(BUILD_DIR)/dist/dist/lib64/wine/dxvk/*.dll /vagrant/dxvk/lib64/wine/dxvk/
cp -f $(BUILD_DIR)/dist/files/lib/wine/dxvk/*.dll /vagrant/dxvk/lib/wine/dxvk/ && \
cp -f $(BUILD_DIR)/dist/files/lib64/wine/dxvk/*.dll /vagrant/dxvk/lib64/wine/dxvk/
dxvk-nvapi: | vagrant_share/dxvk-nvapi/lib/wine/nvapi
dxvk-nvapi: | vagrant_share/dxvk-nvapi/lib64/wine/nvapi
dxvk-nvapi: private SHELL := $(VAGRANT_SHELL)
dxvk-nvapi: downloads
$(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) $(CCACHE_FLAG) dxvk-nvapi && \
cp -f $(BUILD_DIR)/dist/files/lib/wine/nvapi/*.dll /vagrant/dxvk-nvapi/lib/wine/nvapi/ && \
cp -f $(BUILD_DIR)/dist/files/lib64/wine/nvapi/*.dll /vagrant/dxvk-nvapi/lib64/wine/nvapi/
vkd3d-proton: | vagrant_share/vkd3d-proton/lib/wine/vkd3d-proton
vkd3d-proton: | vagrant_share/vkd3d-proton/lib64/wine/vkd3d-proton
vkd3d-proton: private SHELL := $(VAGRANT_SHELL)
vkd3d-proton: downloads
$(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) $(CCACHE_FLAG) vkd3d-proton && \
cp -f $(BUILD_DIR)/dist/dist/lib/wine/vkd3d-proton/*.dll /vagrant/vkd3d-proton/lib/wine/vkd3d-proton/ && \
cp -f $(BUILD_DIR)/dist/dist/lib64/wine/vkd3d-proton/*.dll /vagrant/vkd3d-proton/lib64/wine/vkd3d-proton/
cp -f $(BUILD_DIR)/dist/files/lib/wine/vkd3d-proton/*.dll /vagrant/vkd3d-proton/lib/wine/vkd3d-proton/ && \
cp -f $(BUILD_DIR)/dist/files/lib64/wine/vkd3d-proton/*.dll /vagrant/vkd3d-proton/lib64/wine/vkd3d-proton/
lsteamclient: | vagrant_share/lsteamclient/lib/wine
lsteamclient: | vagrant_share/lsteamclient/lib64/wine
lsteamclient: private SHELL := $(VAGRANT_SHELL)
lsteamclient: downloads
$(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) $(CCACHE_FLAG) lsteamclient && \
cp -f $(BUILD_DIR)/dist/dist/lib/wine/lsteamclient.dll.so /vagrant/lsteamclient/lib/wine && \
cp -f $(BUILD_DIR)/dist/dist/lib64/wine/lsteamclient.dll.so /vagrant/lsteamclient/lib64/wine
cp -f $(BUILD_DIR)/dist/files/lib/wine/lsteamclient.dll.so /vagrant/lsteamclient/lib/wine && \
cp -f $(BUILD_DIR)/dist/files/lib64/wine/lsteamclient.dll.so /vagrant/lsteamclient/lib64/wine
vrclient: | vagrant_share/vrclient/lib/wine
vrclient: | vagrant_share/vrclient/lib64/wine
vrclient: private SHELL := $(VAGRANT_SHELL)
vrclient: downloads
$(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) $(CCACHE_FLAG) vrclient && \
cp -f $(BUILD_DIR)/dist/dist/lib/wine/vrclient.dll.so /vagrant/vrclient/lib/wine && \
cp -f $(BUILD_DIR)/dist/dist/lib64/wine/vrclient_x64.dll.so /vagrant/vrclient/lib64/wine
cp -f $(BUILD_DIR)/dist/files/lib/wine/vrclient.dll.so /vagrant/vrclient/lib/wine && \
cp -f $(BUILD_DIR)/dist/files/lib64/wine/vrclient_x64.dll.so /vagrant/vrclient/lib64/wine
wineopenxr: | vagrant_share/wineopenxr/lib/wine
wineopenxr: | vagrant_share/wineopenxr/lib64/wine
wineopenxr: private SHELL := $(VAGRANT_SHELL)
wineopenxr: downloads
$(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) $(CCACHE_FLAG) wineopenxr && \
cp -f $(BUILD_DIR)/dist/dist/lib64/wine/wineopenxr.dll.so /vagrant/wineopenxr/lib64/wine
cp -f $(BUILD_DIR)/dist/files/lib64/wine/wineopenxr.dll.so /vagrant/wineopenxr/lib64/wine
vagrant_share/%:
mkdir -p $@

View File

@ -303,6 +303,7 @@ the Wine prefix. Removing the option will revert to the previous behavior.
| <tt>noesync</tt> | <tt>PROTON_NO_ESYNC</tt> | Do not use eventfd-based in-process synchronization primitives. |
| <tt>nofsync</tt> | <tt>PROTON_NO_FSYNC</tt> | Do not use futex-based in-process synchronization primitives. (Automatically disabled on systems with no `FUTEX_WAIT_MULTIPLE` support.) |
| <tt>noxim</tt> | <tt>PROTON_NO_XIM</tt> | Enabled by default. Do not attempt to use XIM (X Input Methods) support. XIM support is known to cause crashes with libx11 older than version 1.7. |
| <tt>enablenvapi</tt> | <tt>PROTON_ENABLE_NVAPI</tt> | Enable NVIDIA's NVAPI GPU support library. |
| <tt>nativevulkanloader</tt> | | Use the Vulkan loader shipped with the game instead of Proton's built-in Vulkan loader. This breaks VR support, but is required by a few games. |
| <tt>forcelgadd</tt> | <tt>PROTON_FORCE_LARGE_ADDRESS_AWARE</tt> | Force Wine to enable the LARGE_ADDRESS_AWARE flag for all executables. Enabled by default. |
| <tt>heapdelayfree</tt>| <tt>PROTON_HEAP_DELAY_FREE</tt>| Delay freeing some memory, to work around application use-after-free bugs. |

View File

@ -1,3 +1,6 @@
# Enable secondary expansions, needed for font compilation rules
.SECONDEXPANSION:
SRC := $(abspath $(SRCDIR))
OBJ := $(abspath $(CURDIR))
@ -140,7 +143,7 @@ endif
##
DST_BASE := $(OBJ)/dist
DST_DIR := $(DST_BASE)/dist
DST_DIR := $(DST_BASE)/files
DST_LIBDIR32 := $(DST_DIR)/lib
DST_LIBDIR64 := $(DST_DIR)/lib64
DEPLOY_DIR := ./deploy
@ -182,12 +185,13 @@ CARGO_BUILD_ARG := --release
COMPAT_MANIFEST_TEMPLATE := $(SRCDIR)/compatibilitytool.vdf.template
LICENSE := $(SRCDIR)/dist.LICENSE
OFL_LICENSE := $(SRCDIR)/fonts/liberation-fonts/LICENSE
STEAMPIPE_FIXUPS_PY := $(SRCDIR)/steampipe_fixups.py
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.1.2
WINEMONO_VER := 6.2.2
WINEMONO_TARBALL := wine-mono-$(WINEMONO_VER)-x86.tar.xz
FONTS := $(SRCDIR)/fonts
@ -268,8 +272,9 @@ DIST_TARGETS := $(DIST_COPY_TARGETS) $(DIST_OVR32) $(DIST_OVR64) \
$(DIST_GECKO32) $(DIST_GECKO64) $(DIST_WINEMONO) \
$(DIST_COMPAT_MANIFEST) $(DIST_LICENSE) $(DIST_TOOLMANIFEST) $(DIST_OFL_LICENSE) $(DIST_FONTS)
DEPLOY_COPY_TARGETS := $(DIST_COPY_TARGETS) $(DIST_VERSION) $(DIST_LICENSE) $(DIST_TOOLMANIFEST) $(DIST_OFL_LICENSE)
REDIST_COPY_TARGETS := $(DEPLOY_COPY_TARGETS) $(DIST_COMPAT_MANIFEST)
BASE_COPY_TARGETS := $(DIST_COPY_TARGETS) $(DIST_VERSION) $(DIST_LICENSE) $(DIST_TOOLMANIFEST) $(DIST_OFL_LICENSE) $(DST_DIR)
DEPLOY_COPY_TARGETS := $(BASE_COPY_TARGETS) $(STEAMPIPE_FIXUPS_PY)
REDIST_COPY_TARGETS := $(BASE_COPY_TARGETS) $(DIST_COMPAT_MANIFEST)
$(DIST_LICENSE): $(LICENSE)
cp -a $< $@
@ -339,7 +344,10 @@ $(DIST_WINEMONO): | $(DIST_WINEMONO_DIR)
$(DIST_FONTS): fonts
mkdir -p $@
cp $(FONTS_OBJ)/*.ttf "$@"
cp $(FONTS_OBJ)/*.otf "$@"
cp $(FONTS_OBJ)/source-han/msyh.ttf "$@"
cp $(FONTS_OBJ)/source-han/simsun.ttc "$@"
cp $(FONTS_OBJ)/source-han/msgothic.ttc "$@"
cp $(FONTS_OBJ)/source-han/malgun.ttf "$@"
.PHONY: dist
@ -358,24 +366,20 @@ dist: $(DIST_TARGETS) all-dist dist_wineopenxr | $(DST_DIR)
echo `date '+%s'` `GIT_DIR=$(abspath $(SRCDIR)/.git) git describe --tags` > $(DIST_VERSION)
deploy: dist | $(filter-out dist deploy install redist,$(MAKECMDGOALS))
mkdir -p $(DEPLOY_DIR) && \
cp -a $(DEPLOY_COPY_TARGETS) $(DEPLOY_DIR) && \
tar -C $(DST_DIR) -c . > $(DEPLOY_DIR)/proton_dist.tar
@echo "Created deployment archive at "$(DEPLOY_DIR)"/proton_dist.tar"
mkdir -p $(DEPLOY_DIR)
cp -af --no-dereference --preserve=mode,links $(DEPLOY_COPY_TARGETS) $(DEPLOY_DIR)
python3 $(STEAMPIPE_FIXUPS_PY) process $(DEPLOY_DIR)
install: dist | $(filter-out dist deploy install redist,$(MAKECMDGOALS))
if [ ! -d $(STEAM_DIR) ]; then echo >&2 "!! "$(STEAM_DIR)" does not exist, cannot install"; return 1; fi
mkdir -p $(STEAM_DIR)/compatibilitytools.d/$(BUILD_NAME)
cp -rf --no-dereference --preserve=mode,links $(DST_BASE)/* $(STEAM_DIR)/compatibilitytools.d/$(BUILD_NAME)
cp -f $(DIST_VERSION) $(STEAM_DIR)/compatibilitytools.d/$(BUILD_NAME)/dist/
cp -af --no-dereference --preserve=mode,links $(DST_BASE)/* $(STEAM_DIR)/compatibilitytools.d/$(BUILD_NAME)
@echo "Installed Proton to "$(STEAM_DIR)/compatibilitytools.d/$(BUILD_NAME)
@echo "You may need to restart Steam to select this tool"
redist: dist | $(filter-out dist deploy install redist,$(MAKECMDGOALS))
mkdir -p $(REDIST_DIR)
cp -a $(REDIST_COPY_TARGETS) $(REDIST_DIR)
tar -C $(DST_DIR) -c . | gzip -c -1 > $(REDIST_DIR)/proton_dist.tar.gz
@echo "Created redistribution tarball at "$(REDIST_DIR)"/proton_dist.tar.gz"
cp -af --no-dereference --preserve=mode,links $(REDIST_COPY_TARGETS) $(REDIST_DIR)
.PHONY: module32 module64 module
@ -737,6 +741,32 @@ $(OBJ)/.dxvk-post-build32:
touch $@
##
## dxvk-nvapi
##
DXVK_NVAPI_MESON_ARGS32 = \
--bindir=$(DXVK_NVAPI_DST32)/lib/wine/nvapi \
--cross-file=$(DXVK_NVAPI_OBJ32)/build-win32.txt
DXVK_NVAPI_MESON_ARGS64 = \
--bindir=$(DXVK_NVAPI_DST64)/lib64/wine/nvapi \
--cross-file=$(DXVK_NVAPI_OBJ64)/build-win64.txt
$(eval $(call rules-source,dxvk-nvapi,$(SRCDIR)/dxvk-nvapi))
$(eval $(call rules-meson,dxvk-nvapi,32))
$(eval $(call rules-meson,dxvk-nvapi,64))
$(OBJ)/.dxvk-nvapi-post-build64:
mkdir -p "$(DST_DIR)"/lib64/wine/nvapi
rm -f "$(DST_DIR)"/lib64/wine/nvapi/version && if test -e $(SRCDIR)/.git; then ( cd $(SRCDIR) && git submodule status -- dxvk-nvapi ) > "$(DST_DIR)"/lib64/wine/nvapi/version; fi
touch $@
$(OBJ)/.dxvk-nvapi-post-build32:
mkdir -p "$(DST_DIR)"/lib/wine/nvapi
rm -f "$(DST_DIR)"/lib/wine/nvapi/version && if test -e $(SRCDIR)/.git; then ( cd $(SRCDIR) && git submodule status -- dxvk-nvapi ) > "$(DST_DIR)"/lib/wine/nvapi/version; fi
touch $@
##
## vkd3d-proton
##
@ -812,14 +842,64 @@ FONTSCRIPT = $(FONTS)/scripts/generatefont.pe
LIBERATION_SRCDIR = $(FONTS)/liberation-fonts/src
SOURCE_HAN_SANS_SRCDIR = $(FONTS)/source-han-sans
SOURCE_HAN_SANS_REGULAR_CIDFONTINFO = $(SOURCE_HAN_SANS_SRCDIR)/cidfontinfo.OTC.SC
SOURCE_HAN_SANS_REGULAR_CIDFONT = $(SOURCE_HAN_SANS_SRCDIR)/cidfont.ps.OTC.SC
SOURCE_HAN_SANS_REGULAR_FEATURES = $(SOURCE_HAN_SANS_SRCDIR)/features.OTC.SC
SOURCE_HAN_SANS_REGULAR_SEQUENCES = $(SOURCE_HAN_SANS_SRCDIR)/SourceHanSans_CN_sequences.txt
SOURCE_HAN_SANS_REGULAR_UNISOURCE = $(SOURCE_HAN_SANS_SRCDIR)/UniSourceHanSansCN-UTF32-H
YAHEI_MENUNAMEDB = $(FONTS)/patches/YaHei-FontMenuNameDB
msyh.ttf_CIDFONTINFO = $(SOURCE_HAN_SANS_SRCDIR)/cidfontinfo.OTC.SC
msyh.ttf_CIDFONT = $(SOURCE_HAN_SANS_SRCDIR)/cidfont.ps.OTC.SC
msyh.ttf_FEATURES = $(SOURCE_HAN_SANS_SRCDIR)/features.OTC.SC
msyh.ttf_SEQUENCES = $(SOURCE_HAN_SANS_SRCDIR)/SourceHanSans_CN_sequences.txt
msyh.ttf_UNISOURCE = $(SOURCE_HAN_SANS_SRCDIR)/UniSourceHanSansCN-UTF32-H
msyh.ttf_MENUNAMEDB = $(FONTS)/patches/YaHei-FontMenuNameDB
msyh.ttf = $(FONTS_OBJ)/source-han/msyh.ttf
SOURCE_HAN_SANS_REGULAR_OTF = $(FONTS_OBJ)/SourceHanSansSCRegular.otf
simsun.ttf_CIDFONTINFO = $(SOURCE_HAN_SANS_SRCDIR)/cidfontinfo.OTC.SC
simsun.ttf_CIDFONT = $(SOURCE_HAN_SANS_SRCDIR)/cidfont.ps.OTC.SC
simsun.ttf_FEATURES = $(SOURCE_HAN_SANS_SRCDIR)/features.OTC.SC
simsun.ttf_SEQUENCES = $(SOURCE_HAN_SANS_SRCDIR)/SourceHanSans_CN_sequences.txt
simsun.ttf_UNISOURCE = $(SOURCE_HAN_SANS_SRCDIR)/UniSourceHanSansCN-UTF32-H
simsun.ttf_MENUNAMEDB = $(FONTS)/patches/SimSun-FontMenuNameDB
simsun.ttf = $(FONTS_OBJ)/source-han/simsun.ttf
nsimsun.ttf_CIDFONTINFO = $(SOURCE_HAN_SANS_SRCDIR)/cidfontinfo.OTC.SC
nsimsun.ttf_CIDFONT = $(SOURCE_HAN_SANS_SRCDIR)/cidfont.ps.OTC.SC
nsimsun.ttf_FEATURES = $(SOURCE_HAN_SANS_SRCDIR)/features.OTC.SC
nsimsun.ttf_SEQUENCES = $(SOURCE_HAN_SANS_SRCDIR)/SourceHanSans_CN_sequences.txt
nsimsun.ttf_UNISOURCE = $(SOURCE_HAN_SANS_SRCDIR)/UniSourceHanSansCN-UTF32-H
nsimsun.ttf_MENUNAMEDB = $(FONTS)/patches/NSimSun-FontMenuNameDB
nsimsun.ttf = $(FONTS_OBJ)/source-han/nsimsun.ttf
msgothic.ttf_CIDFONTINFO = $(SOURCE_HAN_SANS_SRCDIR)/cidfontinfo.OTC.J
msgothic.ttf_CIDFONT = $(SOURCE_HAN_SANS_SRCDIR)/cidfont.ps.OTC.J
msgothic.ttf_FEATURES = $(SOURCE_HAN_SANS_SRCDIR)/features.OTC.J
msgothic.ttf_SEQUENCES = $(SOURCE_HAN_SANS_SRCDIR)/SourceHanSans_JP_sequences.txt
msgothic.ttf_UNISOURCE = $(SOURCE_HAN_SANS_SRCDIR)/UniSourceHanSansJP-UTF32-H
msgothic.ttf_MENUNAMEDB = $(FONTS)/patches/MSGothic-FontMenuNameDB
msgothic.ttf = $(FONTS_OBJ)/source-han/msgothic.ttf
mspgothic.ttf_CIDFONTINFO = $(SOURCE_HAN_SANS_SRCDIR)/cidfontinfo.OTC.J
mspgothic.ttf_CIDFONT = $(SOURCE_HAN_SANS_SRCDIR)/cidfont.ps.OTC.J
mspgothic.ttf_FEATURES = $(SOURCE_HAN_SANS_SRCDIR)/features.OTC.J
mspgothic.ttf_SEQUENCES = $(SOURCE_HAN_SANS_SRCDIR)/SourceHanSans_JP_sequences.txt
mspgothic.ttf_UNISOURCE = $(SOURCE_HAN_SANS_SRCDIR)/UniSourceHanSansJP-UTF32-H
mspgothic.ttf_MENUNAMEDB = $(FONTS)/patches/MSPGothic-FontMenuNameDB
mspgothic.ttf = $(FONTS_OBJ)/source-han/mspgothic.ttf
msuigothic.ttf_CIDFONTINFO = $(SOURCE_HAN_SANS_SRCDIR)/cidfontinfo.OTC.J
msuigothic.ttf_CIDFONT = $(SOURCE_HAN_SANS_SRCDIR)/cidfont.ps.OTC.J
msuigothic.ttf_FEATURES = $(SOURCE_HAN_SANS_SRCDIR)/features.OTC.J
msuigothic.ttf_SEQUENCES = $(SOURCE_HAN_SANS_SRCDIR)/SourceHanSans_JP_sequences.txt
msuigothic.ttf_UNISOURCE = $(SOURCE_HAN_SANS_SRCDIR)/UniSourceHanSansJP-UTF32-H
msuigothic.ttf_MENUNAMEDB = $(FONTS)/patches/MSUIGothic-FontMenuNameDB
msuigothic.ttf = $(FONTS_OBJ)/source-han/msuigothic.ttf
malgun.ttf_CIDFONTINFO = $(SOURCE_HAN_SANS_SRCDIR)/cidfontinfo.OTC.K
malgun.ttf_CIDFONT = $(SOURCE_HAN_SANS_SRCDIR)/cidfont.ps.OTC.K
malgun.ttf_FEATURES = $(SOURCE_HAN_SANS_SRCDIR)/features.OTC.K
malgun.ttf_SEQUENCES = $(SOURCE_HAN_SANS_SRCDIR)/SourceHanSans_KR_sequences.txt
malgun.ttf_UNISOURCE = $(SOURCE_HAN_SANS_SRCDIR)/UniSourceHanSansKR-UTF32-H
malgun.ttf_MENUNAMEDB = $(FONTS)/patches/Malgun-FontMenuNameDB
malgun.ttf = $(FONTS_OBJ)/source-han/malgun.ttf
simsun.ttc = $(FONTS_OBJ)/source-han/simsun.ttc
msgothic.ttc = $(FONTS_OBJ)/source-han/msgothic.ttc
#The use of "Arial" here is for compatibility with programs that require that exact string. This font is not Arial.
LiberationSans-Regular_NAMES := "Arial" "Arial" "Arial"
@ -843,20 +923,36 @@ $(FONTS_OBJ)/%.sfd: $(LIBERATION_SRCDIR)/%.sfd | $(FONTS_OBJ)
patch $< -o $@ $(firstword $($(*)_PATCH) /dev/null)
#The use of "YaHei" for compatibility with programs that require that exact string. This font is not Microsoft YaHei.
$(SOURCE_HAN_SANS_REGULAR_OTF): $(SOURCE_HAN_SANS_REGULAR_CIDFONTINFO) $(SOURCE_HAN_SANS_REGULAR_CIDFONT) \
$(SOURCE_HAN_SANS_REGULAR_FEATURES) $(SOURCE_HAN_SANS_REGULAR_SEQUENCES) $(SOURCE_HAN_SANS_REGULAR_UNISOURCE) $(YAHEI_MENUNAMEDB)
$(AFDKO_VERB) makeotf -f $(SOURCE_HAN_SANS_REGULAR_CIDFONT) -omitMacNames -ff $(SOURCE_HAN_SANS_REGULAR_FEATURES) \
-fi $(SOURCE_HAN_SANS_REGULAR_CIDFONTINFO) -mf $(YAHEI_MENUNAMEDB) -r -nS -cs 25 -ch $(SOURCE_HAN_SANS_REGULAR_UNISOURCE) \
-ci $(SOURCE_HAN_SANS_REGULAR_SEQUENCES) -o $(SOURCE_HAN_SANS_REGULAR_OTF)
$(AFDKO_VERB) tx -cff +S -no_futile $(SOURCE_HAN_SANS_REGULAR_CIDFONT) $(FONTS_OBJ)/CFF.OTC.SC
$(AFDKO_VERB) sfntedit -a CFF=$(FONTS_OBJ)/CFF.OTC.SC $(SOURCE_HAN_SANS_REGULAR_OTF)
$(FONTS_OBJ)/source-han/%.ttf: $$(%.ttf_CIDFONTINFO) $$(%.ttf_CIDFONTINFO) $$(%.ttf_CIDFONT) \
$$(%.ttf_FEATURES) $$(%.ttf_SEQUENCES) $$(%.ttf_UNISOURCE) $$(%.ttf_MENUNAMEDB)
mkdir -p $(FONTS_OBJ)/source-han
# Do not immediately create the target file, so that make is interrupted
# it will restart again
$(AFDKO_VERB) makeotf -f $($(notdir $@)_CIDFONT) -omitMacNames -ff $($(notdir $@)_FEATURES) \
-fi $($(notdir $@)_CIDFONTINFO) -mf $($(notdir $@)_MENUNAMEDB) -r -nS -cs 25 -ch $($(notdir $@)_UNISOURCE) \
-ci $($(notdir $@)_SEQUENCES) -o $@.tmp
$(AFDKO_VERB) tx -cff +S -no_futile $($(notdir $@)_CIDFONT) $@.cff
# sftnedit uses a hardcoded temporary file in the local directory, so we have
# to run it in a dedicated temporary directory to prevent concurrent instances
# to step onto each other's feet
(TEMP_DIR=`mktemp -d` && cd $$TEMP_DIR && $(AFDKO_VERB) sfntedit -a CFF=$(abspath $($(notdir $@)).cff) $(abspath $@.tmp) && rm -fr $$TEMP_DIR)
mv $@.tmp $@
$(simsun.ttc): $(simsun.ttf) $(nsimsun.ttf)
$(AFDKO_VERB) otf2otc -o $@ $^
$(msgothic.ttc): $(msgothic.ttf) $(mspgothic.ttf) $(msuigothic.ttf)
$(AFDKO_VERB) otf2otc -o $@ $^
fonts: $(FONTS_OBJ)/LiberationSans-Regular.ttf
fonts: $(FONTS_OBJ)/LiberationSans-Bold.ttf
fonts: $(FONTS_OBJ)/LiberationSerif-Regular.ttf
fonts: $(FONTS_OBJ)/LiberationMono-Regular.ttf
fonts: $(FONTS_OBJ)/LiberationMono-Bold.ttf
fonts: $(SOURCE_HAN_SANS_REGULAR_OTF)
fonts: $(msyh.ttf)
fonts: $(simsun.ttc)
fonts: $(msgothic.ttc)
fonts: $(malgun.ttf)
##
## Targets

View File

@ -73,6 +73,14 @@ def setup_dll_symlinks(default_pfx_dir, dist_dir):
os.unlink(filename)
make_relative_symlink(target, filename)
#steampipe can't handle filenames with colons, so we remove them here
#and restore them in the proton script
def fixup_drive_links(default_pfx_dir):
for walk_dir, dirs, files in os.walk(os.path.join(default_pfx_dir, "dosdevices")):
for dir_ in dirs:
if ":" in dir_:
os.remove(os.path.join(walk_dir, dir_))
def make_default_pfx(default_pfx_dir, dist_dir, runtime):
local_env = dict(os.environ)
@ -96,6 +104,7 @@ def make_default_pfx(default_pfx_dir, dist_dir, runtime):
env=local_env, check=True)
setup_dll_symlinks(default_pfx_dir, dist_dir)
fixup_drive_links(default_pfx_dir)
if __name__ == '__main__':
import sys

View File

@ -1,4 +1,4 @@
STEAMRT_VERSION = 0.20210126.1
STEAMRT_VERSION = 0.20210505.0
STEAMRT_URLBASE = registry.gitlab.steamos.cloud
PROTONSDK_URLBASE = $(STEAMRT_URLBASE)/proton/soldier/sdk

View File

@ -52,9 +52,14 @@ RUN bash -c 'mkdir -p /usr/lib/ccache && ls /usr/bin/{,*-}{cc,c++,gcc,g++}{,-[0-
ENV PATH=/usr/lib/ccache:$PATH
RUN apt-get install -y \
tini \
libxpresent-dev \
libxpresent-dev:i386 \
python3-pefile \
libcapstone-dev \
libcapstone-dev:i386 \
&& rm -rf /opt/usr/share/doc /opt/usr/share/info /opt/usr/share/man \
&& rm -rf /var/lib/apt/lists/*
ENTRYPOINT ["/usr/bin/tini-static", "-s", "-g", "--"]
CMD ["/bin/bash"]

2
dxvk

@ -1 +1 @@
Subproject commit 726b2138c42825407402c200d9ca495aecbdc96b
Subproject commit ef569a514deb75ca17098c9ddc0108df91e8e7b5

1
dxvk-nvapi Submodule

@ -0,0 +1 @@
Subproject commit 8b3987f6707946b9202eda3dda38632197d2286b

View File

@ -0,0 +1,5 @@
[SourceHanSans-Regular]
f=3,1,0x411,\FF2D\FF33 \30B4\30B7\30C3\30AF
s=3,1,0x411,\6A19\6E96
f=MS Gothic
s=Regular

View File

@ -0,0 +1,5 @@
[SourceHanSans-Regular]
f=3,1,0x411,\FF2D\FF33 \FF30\30B4\30B7\30C3\30AF
s=3,1,0x411,\6A19\6E96
f=MS PGothic
s=Regular

View File

@ -0,0 +1,5 @@
[SourceHanSans-Regular]
f=3,1,0x411,MS UI Gothic
s=3,1,0x411,\6A19\6E96
f=MS UI Gothic
s=Regular

View File

@ -0,0 +1,5 @@
[SourceHanSansK-Regular]
f=3,1,0x412,\B9D1\C740 \ACE0\B515
s=3,1,0x412,Regular
f=Malgun Gothic
s=Regular

View File

@ -0,0 +1,5 @@
[SourceHanSansSC-Regular]
f=3,1,0x804,\65B0\5B8B\4F53
s=3,1,0x804,\5E38\89C4
f=NSimSun
s=Regular

View File

@ -0,0 +1,5 @@
[SourceHanSansSC-Regular]
f=3,1,0x804,\5B8B\4F53
s=3,1,0x804,\5E38\89C4
f=SimSun
s=Regular

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,326 @@
# KRName IVSes
537F E0108; KRName; CID+11743
537F E0109; KRName; CID+61812
5795 E0101; KRName; CID+13409
5795 E0102; KRName; CID+62188
57CE E0104; KRName; CID+13486
57CE E0105; KRName; CID+61817
5ABA E0104; KRName; CID+14991
5ABA E0105; KRName; CID+14991
6210 E0105; KRName; CID+18519
6210 E0106; KRName; CID+61829
665F E0106; KRName; CID+62364
665F E0107; KRName; CID+20400
6674 E0104; KRName; CID+58877
6674 E0105; KRName; CID+20436
695E E0104; KRName; CID+62423
695E E0105; KRName; CID+21671
6D77 E0104; KRName; CID+58933
6D77 E0105; KRName; CID+23486
76DB E0104; KRName; CID+27832
76DB E0105; KRName; CID+62543
8056 E0105; KRName; CID+32435
8056 E0106; KRName; CID+32433
83BD E0108; KRName; CID+62714
83BD E0109; KRName; CID+34274
865C E0104; KRName; CID+58860
865C E0105; KRName; CID+35860
8941 E0104; KRName; CID+37188
8941 E0105; KRName; CID+62775
8AA0 E0104; KRName; CID+37864
8AA0 E0105; KRName; CID+62792
8ACB E0104; KRName; CID+62792
8ACB E0105; KRName; CID+37864
927C E0103; KRName; CID+41543
927C E0104; KRName; CID+41542
9F9C E0107; KRName; CID+47476
9F9C E0108; KRName; CID+63097
# Unicode Version 6.3 SVSes
4E0D FE00; Standardized_Variants; CID+9496
4E32 FE00; Standardized_Variants; CID+9551
4E39 FE00; Standardized_Variants; CID+9560
4E82 FE00; Standardized_Variants; CID+9653
4E86 FE00; Standardized_Variants; CID+9660
4EAE FE00; Standardized_Variants; CID+9725
4EC0 FE00; Standardized_Variants; CID+9756
4EE4 FE00; Standardized_Variants; CID+9808
4F86 FE00; Standardized_Variants; CID+10047
4F8B FE00; Standardized_Variants; CID+10054
4FBF FE00; Standardized_Variants; CID+10136
502B FE00; Standardized_Variants; CID+10320
50DA FE00; Standardized_Variants; CID+10639
5169 FE00; Standardized_Variants; CID+10900
516D FE00; Standardized_Variants; CID+10911
51B7 FE00; Standardized_Variants; CID+11016
51C9 FE00; Standardized_Variants; CID+11046
51CC FE00; Standardized_Variants; CID+11054
51DC FE00; Standardized_Variants; CID+11082
5207 FE00; Standardized_Variants; CID+11145
5217 FE00; Standardized_Variants; CID+11163
5229 FE00; Standardized_Variants; CID+11189
523A FE00; Standardized_Variants; CID+11212
5289 FE00; Standardized_Variants; CID+11340
529B FE00; Standardized_Variants; CID+11377
52A3 FE00; Standardized_Variants; CID+11385
52D2 FE00; Standardized_Variants; CID+11454
52DE FE00; Standardized_Variants; CID+11473
52F5 FE00; Standardized_Variants; CID+11509
5317 FE00; Standardized_Variants; CID+11566
533F FE00; Standardized_Variants; CID+11649
5375 FE00; Standardized_Variants; CID+11725
53C3 FE00; Standardized_Variants; CID+11848
53E5 FE00; Standardized_Variants; CID+11904
540F FE00; Standardized_Variants; CID+11958
541D FE00; Standardized_Variants; CID+11975
5442 FE00; Standardized_Variants; CID+12042
54BD FE00; Standardized_Variants; CID+12218
5587 FE00; Standardized_Variants; CID+12520
56F9 FE00; Standardized_Variants; CID+13179
585E FE00; Standardized_Variants; CID+13729
58D8 FE00; Standardized_Variants; CID+13938
58DF FE00; Standardized_Variants; CID+13954
5948 FE00; Standardized_Variants; CID+14119
5951 FE00; Standardized_Variants; CID+58855
5973 FE00; Standardized_Variants; CID+14197
5B85 FE00; Standardized_Variants; CID+15453
5BE7 FE00; Standardized_Variants; CID+62232
5BE7 FE01; Standardized_Variants; CID+62232
5BEE FE00; Standardized_Variants; CID+15675
5C3F FE00; Standardized_Variants; CID+15807
5C62 FE00; Standardized_Variants; CID+15861
5C65 FE00; Standardized_Variants; CID+15869
5D19 FE00; Standardized_Variants; CID+16219
5D50 FE00; Standardized_Variants; CID+16337
5DBA FE00; Standardized_Variants; CID+16563
5E74 FE00; Standardized_Variants; CID+16855
5EA6 FE00; Standardized_Variants; CID+16945
5EC9 FE00; Standardized_Variants; CID+58865
5ECA FE00; Standardized_Variants; CID+62259
5ED3 FE00; Standardized_Variants; CID+17040
5EEC FE00; Standardized_Variants; CID+17097
5F04 FE00; Standardized_Variants; CID+17143
5F8B FE00; Standardized_Variants; CID+17393
5FA9 FE00; Standardized_Variants; CID+17437
5FF5 FE00; Standardized_Variants; CID+17565
6012 FE00; Standardized_Variants; CID+17608
601C FE00; Standardized_Variants; CID+17622
60E1 FE00; Standardized_Variants; CID+17952
6144 FE00; Standardized_Variants; CID+18124
6190 FE00; Standardized_Variants; CID+18280
61F6 FE00; Standardized_Variants; CID+18471
6200 FE00; Standardized_Variants; CID+18496
622E FE00; Standardized_Variants; CID+18563
62C9 FE00; Standardized_Variants; CID+18812
62CF FE00; Standardized_Variants; CID+18821
62D3 FE00; Standardized_Variants; CID+18828
62FE FE00; Standardized_Variants; CID+18890
637B FE00; Standardized_Variants; CID+19086
63A0 FE00; Standardized_Variants; CID+19151
649A FE00; Standardized_Variants; CID+19595
64C4 FE00; Standardized_Variants; CID+19674
6578 FE00; Standardized_Variants; CID+20006
6599 FE00; Standardized_Variants; CID+20066
65C5 FE00; Standardized_Variants; CID+58862
6613 FE00; Standardized_Variants; CID+20292
6688 FE00; Standardized_Variants; CID+20467
66B4 FE00; Standardized_Variants; CID+20541
66C6 FE00; Standardized_Variants; CID+20573
66F4 FE00; Standardized_Variants; CID+20652
6717 FE00; Standardized_Variants; CID+62390
674E FE00; Standardized_Variants; CID+20808
677B FE00; Standardized_Variants; CID+20871
6797 FE00; Standardized_Variants; CID+20919
67F3 FE00; Standardized_Variants; CID+21054
6817 FE00; Standardized_Variants; CID+21107
6881 FE00; Standardized_Variants; CID+21275
68A8 FE00; Standardized_Variants; CID+21346
6A02 FE00; Standardized_Variants; CID+21980
6A02 FE01; Standardized_Variants; CID+21980
6A02 FE02; Standardized_Variants; CID+21980
6A13 FE00; Standardized_Variants; CID+22009
6AD3 FE00; Standardized_Variants; CID+22349
6B04 FE00; Standardized_Variants; CID+58856
6B77 FE00; Standardized_Variants; CID+22652
6BAE FE00; Standardized_Variants; CID+22766
6BBA FE00; Standardized_Variants; CID+58861
6C88 FE00; Standardized_Variants; CID+23136
6CCC FE00; Standardized_Variants; CID+23231
6CE5 FE00; Standardized_Variants; CID+23275
6D1B FE00; Standardized_Variants; CID+23352
6D1E FE00; Standardized_Variants; CID+23356
6D41 FE00; Standardized_Variants; CID+23409
6D6A FE00; Standardized_Variants; CID+23466
6DCB FE00; Standardized_Variants; CID+23618
6DDA FE00; Standardized_Variants; CID+23649
6DEA FE00; Standardized_Variants; CID+23680
6E9C FE00; Standardized_Variants; CID+23971
6EBA FE00; Standardized_Variants; CID+24026
6ED1 FE00; Standardized_Variants; CID+24080
6F0F FE00; Standardized_Variants; CID+24192
6F23 FE00; Standardized_Variants; CID+24229
6FEB FE00; Standardized_Variants; CID+24584
6FFE FE00; Standardized_Variants; CID+24619
7099 FE00; Standardized_Variants; CID+24930
70C8 FE00; Standardized_Variants; CID+25014
70D9 FE00; Standardized_Variants; CID+25045
7149 FE00; Standardized_Variants; CID+25253
71CE FE00; Standardized_Variants; CID+25539
71D0 FE00; Standardized_Variants; CID+25543
7210 FE00; Standardized_Variants; CID+25680
721B FE00; Standardized_Variants; CID+25703
7262 FE00; Standardized_Variants; CID+25841
72C0 FE00; Standardized_Variants; CID+25979
72FC FE00; Standardized_Variants; CID+26067
7375 FE00; Standardized_Variants; CID+26278
7387 FE00; Standardized_Variants; CID+26317
7387 FE01; Standardized_Variants; CID+26317
73B2 FE00; Standardized_Variants; CID+26376
73DE FE00; Standardized_Variants; CID+26433
7406 FE00; Standardized_Variants; CID+26492
7409 FE00; Standardized_Variants; CID+26497
7469 FE00; Standardized_Variants; CID+26662
7489 FE00; Standardized_Variants; CID+26720
7498 FE00; Standardized_Variants; CID+26744
7559 FE00; Standardized_Variants; CID+27123
7565 FE00; Standardized_Variants; CID+27147
7570 FE00; Standardized_Variants; CID+27167
75E2 FE00; Standardized_Variants; CID+27369
7642 FE00; Standardized_Variants; CID+27572
7669 FE00; Standardized_Variants; CID+27653
76E7 FE00; Standardized_Variants; CID+27853
7701 FE00; Standardized_Variants; CID+27896
786B FE00; Standardized_Variants; CID+28463
788C FE00; Standardized_Variants; CID+28514
78CA FE00; Standardized_Variants; CID+28617
78FB FE00; Standardized_Variants; CID+28712
792A FE00; Standardized_Variants; CID+28785
797F FE00; Standardized_Variants; CID+28943
79AE FE00; Standardized_Variants; CID+29040
79CA FE00; Standardized_Variants; CID+29091
7A1C FE00; Standardized_Variants; CID+29225
7ACB FE00; Standardized_Variants; CID+29614
7B20 FE00; Standardized_Variants; CID+29778
7C3E FE00; Standardized_Variants; CID+30373
7C60 FE00; Standardized_Variants; CID+30454
7C92 FE00; Standardized_Variants; CID+30566
7CD6 FE00; Standardized_Variants; CID+58869
7CE7 FE00; Standardized_Variants; CID+30749
7D10 FE00; Standardized_Variants; CID+30837
7D22 FE00; Standardized_Variants; CID+30879
7D2F FE00; Standardized_Variants; CID+30901
7DA0 FE00; Standardized_Variants; CID+31127
7DBE FE00; Standardized_Variants; CID+31192
7DF4 FE00; Standardized_Variants; CID+58951
7E37 FE00; Standardized_Variants; CID+31451
7F79 FE00; Standardized_Variants; CID+31966
7F85 FE00; Standardized_Variants; CID+31989
7F9A FE00; Standardized_Variants; CID+32027
8001 FE00; Standardized_Variants; CID+32271
8046 FE00; Standardized_Variants; CID+32405
806F FE00; Standardized_Variants; CID+32482
807E FE00; Standardized_Variants; CID+32518
808B FE00; Standardized_Variants; CID+32542
81D8 FE00; Standardized_Variants; CID+33244
81E8 FE00; Standardized_Variants; CID+33282
826F FE00; Standardized_Variants; CID+33601
82E5 FE00; Standardized_Variants; CID+33844
8336 FE00; Standardized_Variants; CID+34013
83C9 FE00; Standardized_Variants; CID+34302
83F1 FE00; Standardized_Variants; CID+34391
843D FE00; Standardized_Variants; CID+34557
8449 FE00; Standardized_Variants; CID+34583
84EE FE00; Standardized_Variants; CID+58863
84FC FE00; Standardized_Variants; CID+35004
85CD FE00; Standardized_Variants; CID+35513
85FA FE00; Standardized_Variants; CID+35625
8606 FE00; Standardized_Variants; CID+35658
862D FE00; Standardized_Variants; CID+58857
863F FE00; Standardized_Variants; CID+35799
865C FE00; Standardized_Variants; CID+58860
87BA FE00; Standardized_Variants; CID+36439
881F FE00; Standardized_Variants; CID+36626
884C FE00; Standardized_Variants; CID+36710
88C2 FE00; Standardized_Variants; CID+36912
88CF FE00; Standardized_Variants; CID+36938
88E1 FE00; Standardized_Variants; CID+36980
88F8 FE00; Standardized_Variants; CID+37027
8964 FE00; Standardized_Variants; CID+37260
898B FE00; Standardized_Variants; CID+37348
8AAA FE00; Standardized_Variants; CID+37887
8AAA FE01; Standardized_Variants; CID+37887
8AD2 FE00; Standardized_Variants; CID+37971
8AD6 FE00; Standardized_Variants; CID+37980
8AFE FE00; Standardized_Variants; CID+38063
8B58 FE00; Standardized_Variants; CID+38273
8B80 FE00; Standardized_Variants; CID+38357
8C48 FE00; Standardized_Variants; CID+38616
8CC2 FE00; Standardized_Variants; CID+38825
8CC8 FE00; Standardized_Variants; CID+38837
8DEF FE00; Standardized_Variants; CID+39263
8ECA FE00; Standardized_Variants; CID+39658
8F26 FE00; Standardized_Variants; CID+39792
8F2A FE00; Standardized_Variants; CID+39800
8F3B FE00; Standardized_Variants; CID+39837
8F62 FE00; Standardized_Variants; CID+39913
8FB0 FE00; Standardized_Variants; CID+40014
9023 FE00; Standardized_Variants; CID+58864
907C FE00; Standardized_Variants; CID+58866
908F FE00; Standardized_Variants; CID+40610
90CE FE00; Standardized_Variants; CID+40706
90DE FE00; Standardized_Variants; CID+40730
916A FE00; Standardized_Variants; CID+40994
91B4 FE00; Standardized_Variants; CID+41166
91CC FE00; Standardized_Variants; CID+41221
91CF FE00; Standardized_Variants; CID+41224
91D1 FE00; Standardized_Variants; CID+41227
9234 FE00; Standardized_Variants; CID+41409
9304 FE00; Standardized_Variants; CID+41812
934A FE00; Standardized_Variants; CID+41946
95AD FE00; Standardized_Variants; CID+42910
962E FE00; Standardized_Variants; CID+43087
964B FE00; Standardized_Variants; CID+43125
964D FE00; Standardized_Variants; CID+62979
9675 FE00; Standardized_Variants; CID+43193
9678 FE00; Standardized_Variants; CID+43201
9686 FE00; Standardized_Variants; CID+58868
96A3 FE00; Standardized_Variants; CID+62985
96B7 FE00; Standardized_Variants; CID+43321
96B8 FE00; Standardized_Variants; CID+43322
96E2 FE00; Standardized_Variants; CID+43413
96F6 FE00; Standardized_Variants; CID+43450
96F7 FE00; Standardized_Variants; CID+43453
9732 FE00; Standardized_Variants; CID+43581
9748 FE00; Standardized_Variants; CID+43630
9818 FE00; Standardized_Variants; CID+43995
985E FE00; Standardized_Variants; CID+58867
99F1 FE00; Standardized_Variants; CID+44843
9A6A FE00; Standardized_Variants; CID+45067
9B6F FE00; Standardized_Variants; CID+45594
9C57 FE00; Standardized_Variants; CID+45979
9DFA FE00; Standardized_Variants; CID+46622
9E1E FE00; Standardized_Variants; CID+46689
9E7F FE00; Standardized_Variants; CID+46792
9E97 FE00; Standardized_Variants; CID+63077
9E9F FE00; Standardized_Variants; CID+46885
9ECE FE00; Standardized_Variants; CID+47010
9F8D FE00; Standardized_Variants; CID+47443
9F9C FE00; Standardized_Variants; CID+63096
9F9C FE01; Standardized_Variants; CID+63096
# Unicode Version 12.0 SVSes
3001 FE00; Standardized_Variants; CID+1397
3001 FE01; Standardized_Variants; CID+63145
3002 FE00; Standardized_Variants; CID+1398
3002 FE01; Standardized_Variants; CID+63146
FF01 FE00; Standardized_Variants; CID+63147
FF01 FE01; Standardized_Variants; CID+59047
FF0C FE00; Standardized_Variants; CID+59058
FF0C FE01; Standardized_Variants; CID+63148
FF0E FE00; Standardized_Variants; CID+59060
FF0E FE01; Standardized_Variants; CID+63149
FF1A FE00; Standardized_Variants; CID+63150
FF1A FE01; Standardized_Variants; CID+59072
FF1B FE00; Standardized_Variants; CID+63151
FF1B FE01; Standardized_Variants; CID+59073
FF1F FE00; Standardized_Variants; CID+63152
FF1F FE01; Standardized_Variants; CID+59077
# EOF

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,22 @@
FontName (SourceHanSans-Regular)
FullName (Source Han Sans Regular)
FamilyName (Source Han Sans)
Weight (Regular)
version (2.001)
Registry (Adobe)
Ordering (Identity)
Supplement 0
Layout (AI0-SourceHanSans)
FSType 0
isFixedPitch false
UnderlinePosition -150
AdobeCopyright (Copyright 2014-2019 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'.)
Trademark (Source is a trademark of Adobe in the United States and/or other countries.)
Serif false
IsBoldStyle false
IsItalicStyle false
PreferOS/2TypoMetrics false
IsOS/2WidthWeigthSlopeOnly false
IsOS/2OBLIQUE false
UseOldNameID4 false
LicenseCode ADOBE

View File

@ -0,0 +1,22 @@
FontName (SourceHanSansK-Regular)
FullName (Source Han Sans Korean Regular)
FamilyName (Source Han Sans Korean)
Weight (Regular)
version (2.001)
Registry (Adobe)
Ordering (Identity)
Supplement 0
Layout (AI0-SourceHanSans)
FSType 0
isFixedPitch false
UnderlinePosition -150
AdobeCopyright (Copyright 2014-2019 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'.)
Trademark (Source is a trademark of Adobe in the United States and/or other countries.)
Serif false
IsBoldStyle false
IsItalicStyle false
PreferOS/2TypoMetrics false
IsOS/2WidthWeigthSlopeOnly false
IsOS/2OBLIQUE false
UseOldNameID4 false
LicenseCode ADOBE

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

204
proton
View File

@ -15,6 +15,15 @@ import subprocess
import sys
import tarfile
from ctypes import CDLL
from ctypes import POINTER
from ctypes import Structure
from ctypes import addressof
from ctypes import cast
from ctypes import c_int
from ctypes import c_char_p
from ctypes import c_void_p
from filelock import FileLock
from random import randrange
@ -68,7 +77,7 @@ def makedirs(path):
#already exists
pass
def try_copy(src, dst, add_write_perm=True):
def try_copy(src, dst, add_write_perm=True, optional=False):
try:
if os.path.isdir(dst):
dstfile = dst + "/" + os.path.basename(src)
@ -85,6 +94,12 @@ def try_copy(src, dst, add_write_perm=True):
new_mode = os.lstat(dstfile).st_mode | stat.S_IWUSR | stat.S_IWGRP
os.chmod(dstfile, new_mode)
except FileNotFoundError as e:
if optional:
log('Error while copying to \"' + dst + '\": ' + e.strerror)
else:
raise
except PermissionError as e:
if e.errno == errno.EPERM:
#be forgiving about permissions errors; if it's a real problem, things will explode later anyway
@ -128,6 +143,87 @@ def try_get_game_library_dir():
return None
# Function to find the installed location of DLL files for use by Wine/Proton
# from the NVIDIA Linux driver
#
# See https://gitlab.steamos.cloud/steamrt/steam-runtime-tools/-/issues/71 for
# background on the chosen method of DLL discovery.
#
# On success, returns a str() of the absolute-path to the directory at which DLL
# files are stored
#
# On failure, returns None
def find_nvidia_wine_dll_dir():
try:
libdl = CDLL("libdl.so.2")
except (OSError):
return None
try:
libglx_nvidia = CDLL("libGLX_nvidia.so.0")
except OSError:
return None
# from dlinfo(3)
#
# struct link_map {
# ElfW(Addr) l_addr; /* Difference between the
# address in the ELF file and
# the address in memory */
# char *l_name; /* Absolute pathname where
# object was found */
# ElfW(Dyn) *l_ld; /* Dynamic section of the
# shared object */
# struct link_map *l_next, *l_prev;
# /* Chain of loaded objects */
#
# /* Plus additional fields private to the
# implementation */
# };
RTLD_DI_LINKMAP = 2
class link_map(Structure):
_fields_ = [("l_addr", c_void_p), ("l_name", c_char_p), ("l_ld", c_void_p)]
# from dlinfo(3)
#
# int dlinfo (void *restrict handle, int request, void *restrict info)
dlinfo_func = libdl.dlinfo
dlinfo_func.argtypes = c_void_p, c_int, c_void_p
dlinfo_func.restype = c_int
# Allocate a link_map object
glx_nvidia_info_ptr = POINTER(link_map)()
# Run dlinfo(3) on the handle to libGLX_nvidia.so.0, storing results at the
# address represented by glx_nvidia_info_ptr
if dlinfo_func(libglx_nvidia._handle,
RTLD_DI_LINKMAP,
addressof(glx_nvidia_info_ptr)) != 0:
return None
# Grab the contents our of our pointer
glx_nvidia_info = cast(glx_nvidia_info_ptr, POINTER(link_map)).contents
# Decode the path to our library to a str()
if glx_nvidia_info.l_name is None:
return None
try:
libglx_nvidia_path = os.fsdecode(glx_nvidia_info.l_name)
except UnicodeDecodeError:
return None
# Follow any symlinks to the actual file
libglx_nvidia_realpath = os.path.realpath(libglx_nvidia_path)
# Go to the relative path ./nvidia/wine from our library
nvidia_wine_dir = os.path.join(os.path.dirname(libglx_nvidia_realpath), "nvidia", "wine")
# Check that nvngx.dll exists here, or fail
if os.path.exists(os.path.join(nvidia_wine_dir, "nvngx.dll")):
return nvidia_wine_dir
return None
EXT2_IOC_GETFLAGS = 0x80086601
EXT2_IOC_SETFLAGS = 0x40086602
@ -150,14 +246,14 @@ def set_dir_casefold_bit(dir_path):
class Proton:
def __init__(self, base_dir):
self.base_dir = base_dir + "/"
self.dist_dir = self.path("dist/")
self.bin_dir = self.path("dist/bin/")
self.lib_dir = self.path("dist/lib/")
self.lib64_dir = self.path("dist/lib64/")
self.fonts_dir = self.path("dist/share/fonts/")
self.wine_fonts_dir = self.path("dist/share/wine/fonts/")
self.dist_dir = self.path("files/")
self.bin_dir = self.path("files/bin/")
self.lib_dir = self.path("files/lib/")
self.lib64_dir = self.path("files/lib64/")
self.fonts_dir = self.path("files/share/fonts/")
self.wine_fonts_dir = self.path("files/share/wine/fonts/")
self.version_file = self.path("version")
self.default_pfx_dir = self.path("dist/share/default_pfx/")
self.default_pfx_dir = self.path("files/share/default_pfx/")
self.user_settings_file = self.path("user_settings.py")
self.wine_bin = self.bin_dir + "wine"
self.wineserver_bin = self.bin_dir + "wineserver"
@ -166,28 +262,34 @@ class Proton:
def path(self, d):
return self.base_dir + d
def need_tarball_extraction(self):
'''Checks if the proton_dist tarball archive must be extracted. Returns true if extraction is needed, false otherwise'''
return not os.path.exists(self.dist_dir) or \
not os.path.exists(self.path("dist/version")) or \
not filecmp.cmp(self.version_file, self.path("dist/version"))
def cleanup_legacy_dist(self):
old_dist_dir = self.path("dist/")
if os.path.exists(old_dist_dir):
with self.dist_lock:
if os.path.exists(old_dist_dir):
shutil.rmtree(old_dist_dir)
def extract_tarball(self):
with self.dist_lock:
if self.need_tarball_extraction():
if os.path.exists(self.dist_dir):
shutil.rmtree(self.dist_dir)
tar = None
for sf in ["", ".xz", ".bz2", ".gz"]:
if os.path.exists(self.path("proton_dist.tar" + sf)):
tar = tarfile.open(self.path("proton_dist.tar" + sf), mode="r:*")
break
if not tar:
log("No proton_dist tarball??")
sys.exit(1)
tar.extractall(path=self.dist_dir)
tar.close()
try_copy(self.version_file, self.dist_dir)
def do_steampipe_fixups(self):
fixups_json = self.path("steampipe_fixups.json")
fixups_mtime = self.path("files/steampipe_fixups_mtime")
if os.path.exists(fixups_json):
with self.dist_lock:
import steampipe_fixups
current_fixup_mtime = None
if os.path.exists(fixups_mtime):
with open(fixups_mtime, "r") as f:
current_fixup_mtime = f.readline().strip()
new_fixup_mtime = getmtimestr(fixups_json)
if current_fixup_mtime != new_fixup_mtime:
result_code = steampipe_fixups.do_restore(self.base_dir, fixups_json)
if result_code == 0:
with open(fixups_mtime, "w") as f:
f.write(new_fixup_mtime + "\n")
def missing_default_prefix(self):
'''Check if the default prefix dir is missing. Returns true if missing, false if present'''
@ -445,7 +547,10 @@ class CompatData:
( g_proton.fonts_dir, "LiberationSerif-Regular.ttf", "times.ttf" ),
( g_proton.fonts_dir, "LiberationMono-Regular.ttf", "cour.ttf" ),
( g_proton.fonts_dir, "LiberationMono-Bold.ttf", "courbd.ttf" ),
( g_proton.fonts_dir, "SourceHanSansSCRegular.otf", "msyh.ttf" ),
( g_proton.fonts_dir, "msyh.ttf", "msyh.ttf" ),
( g_proton.fonts_dir, "simsun.ttc", "simsun.ttc" ),
( g_proton.fonts_dir, "msgothic.ttc", "msgothic.ttc" ),
( g_proton.fonts_dir, "malgun.ttf", "malgun.ttf" ),
( g_proton.wine_fonts_dir, "tahoma.ttf", "tahoma.ttf" ),
]
@ -479,12 +584,19 @@ class CompatData:
if not os.path.exists(self.prefix_dir + "/user.reg"):
self.copy_pfx()
if not os.path.lexists(self.prefix_dir + "/dosdevices/c:"):
os.symlink("../drive_c", self.prefix_dir + "/dosdevices/c:")
if not os.path.lexists(self.prefix_dir + "/dosdevices/z:"):
os.symlink("/", self.prefix_dir + "/dosdevices/z:")
# collect configuration info
steamdir = os.environ["STEAM_COMPAT_CLIENT_INSTALL_PATH"]
use_wined3d = "wined3d" in g_session.compat_config
use_dxvk_dxgi = not use_wined3d and \
not ("WINEDLLOVERRIDES" in g_session.env and "dxgi=b" in g_session.env["WINEDLLOVERRIDES"])
use_nvapi = 'enablenvapi' in g_session.compat_config
builtin_dll_copy = os.environ.get("PROTON_DLL_COPY",
#dxsetup redist
@ -529,6 +641,7 @@ class CompatData:
str(use_wined3d),
str(use_dxvk_dxgi),
builtin_dll_copy,
str(use_nvapi),
))
# check whether any prefix config has changed
@ -621,6 +734,32 @@ class CompatData:
self.prefix_dir + "drive_c/windows/syswow64/" + f + ".dll")
g_session.dlloverrides[f] = "n"
# If the user requested the NVAPI be available, copy it into place.
# If they didn't, clean up any stray nvapi DLLs.
if use_nvapi:
try_copy(g_proton.lib64_dir + "wine/nvapi/nvapi64.dll",
self.prefix_dir + "drive_c/windows/system32/nvapi64.dll")
try_copy(g_proton.lib_dir + "wine/nvapi/nvapi.dll",
self.prefix_dir + "drive_c/windows/syswow64/nvapi.dll")
g_session.dlloverrides["nvapi64"] = "n"
g_session.dlloverrides["nvapi"] = "n"
else:
nvapi64_dll = self.prefix_dir + "drive_c/windows/system32/nvapi64.dll"
nvapi32_dll = self.prefix_dir + "drive_c/windows/syswow64/nvapi.dll"
if os.path.exists(nvapi64_dll):
os.unlink(nvapi64_dll)
if os.path.exists(nvapi32_dll):
os.unlink(nvapi32_dll)
# Try to detect known DLLs that ship with the NVIDIA Linux Driver
# and add them into the prefix
nvidia_wine_dll_dir = find_nvidia_wine_dll_dir()
if nvidia_wine_dll_dir:
for dll in ["_nvngx.dll", "nvngx.dll"]:
try_copy(nvidia_wine_dll_dir + "/" + dll,
self.prefix_dir + "drive_c/windows/system32/" + dll,
optional=True)
try_copy(g_proton.lib64_dir + "wine/vkd3d-proton/d3d12.dll",
self.prefix_dir + "drive_c/windows/system32/d3d12.dll")
try_copy(g_proton.lib_dir + "wine/vkd3d-proton/d3d12.dll",
@ -786,6 +925,7 @@ class Session:
self.check_environment("PROTON_SET_GAME_DRIVE", "gamedrive")
self.check_environment("PROTON_NO_XIM", "noxim")
self.check_environment("PROTON_HEAP_DELAY_FREE", "heapdelayfree")
self.check_environment("PROTON_ENABLE_NVAPI", "enablenvapi")
if "noesync" in self.compat_config:
self.env.pop("WINEESYNC", "")
@ -1016,8 +1156,8 @@ if __name__ == "__main__":
g_proton = Proton(os.path.dirname(sys.argv[0]))
if g_proton.need_tarball_extraction():
g_proton.extract_tarball()
g_proton.cleanup_legacy_dist()
g_proton.do_steampipe_fixups()
g_compatdata = CompatData(os.environ["STEAM_COMPAT_DATA_PATH"])

116
steampipe_fixups.py Executable file
View File

@ -0,0 +1,116 @@
#!/usr/bin/env python3
#Steampipe doesn't support certain unix-y things which may be required by
#native Linux applications. This file will process a directory of Linux files
#and store the file properties into a manifest file. After a round trip through
#Steampipe, the original file properties can be restored using this same
#script.
import json
import os
import secrets
import stat
DEFAULT_MANIFEST_NAME = "steampipe_fixups.json"
def usage():
print("Usage:")
print("\t" + sys.argv[0] + "\tprepare\t<path to directory to process>\t[manifest output file]")
print("\t\tProcess the given path and output the manifest file to the given path, or <path/" + DEFAULT_MANIFEST_NAME + "> if unspecified.")
print("")
print("\t" + sys.argv[0] + "\trestore\t<path to directory to process>\t[manifest file]")
print("\t\tRestore the given path using the manifest file, or <path/" + DEFAULT_MANIFEST_NAME + "> if unspecified.")
empty_dirs = []
no_write_paths = []
def canonicalize(path, prefix):
return path.replace(prefix, "", 1).lstrip('/')
def process_dir(path):
for root, subdirs, files in os.walk(path):
if len(subdirs) == 0 and len(files) == 0:
empty_dirs.append(canonicalize(root, path))
for file_ in files:
this_file = os.path.join(root, file_)
stat_result = os.lstat(this_file)
if (stat_result.st_mode & stat.S_IWUSR) == 0:
no_write_paths.append(canonicalize(this_file, path))
return 0
def write_manifest(manifest):
out = open(manifest, "w")
json.dump(
{
"id": str(secrets.randbits(32)), #we need steampipe to update this file for every build
"empty_dirs": empty_dirs,
"no_write_paths": no_write_paths,
},
out,
indent = 4,
sort_keys = True
)
return 0
def do_process(path, manifest):
if os.path.exists(manifest):
os.remove(manifest)
ret = process_dir(path)
if ret != 0:
return ret
#output should be deterministic
empty_dirs.sort()
no_write_paths.sort()
ret = write_manifest(manifest)
if ret != 0:
return ret
return 0
def do_restore(path, manifest):
loaded = json.load(open(manifest, "r"))
empty_dirs = loaded["empty_dirs"]
no_write_paths = loaded["no_write_paths"]
for empty_dir in empty_dirs:
try:
os.makedirs(os.path.join(path, empty_dir))
except OSError:
#already exists
pass
for file_ in no_write_paths:
this_file = os.path.join(path, file_)
stat_result = os.lstat(this_file)
os.chmod(this_file,
stat_result.st_mode & ~(stat.S_IWUSR | stat.S_IWGRP | stat.S_IWOTH))
return 0
if __name__ == '__main__':
import sys
if len(sys.argv) < 3 or len(sys.argv) > 4:
usage()
sys.exit(1)
verb = sys.argv[1]
path = sys.argv[2]
if len(sys.argv) >= 4:
manifest = sys.argv[3]
else:
manifest = os.path.join(path, DEFAULT_MANIFEST_NAME)
if verb == "process":
sys.exit(do_process(path, manifest))
if verb == "restore":
sys.exit(do_restore(path, manifest))
usage()
sys.exit(1)

@ -1 +1 @@
Subproject commit 72d9b322b89c325520e8f3060a8b60f719c52d6e
Subproject commit 6fd564db910a7fff4ee27ac8e93c429c7cd07361

View File

@ -280,6 +280,7 @@ skip_structs = [
]
struct_conversion_cache = {}
struct_needs_size_adjustment_cache = {}
print_sizes = []
@ -384,6 +385,11 @@ def ivroverlay_set_overlay_texture(cppname, method):
"025" in cppname
return "ivroverlay_set_overlay_texture"
def ivrinput_get_digital_action_data(cppname, method):
if "003" in cppname:
return None
return "ivrinput_get_digital_action_data"
method_overrides = [
("IVRClientCore", "BIsHmdPresent", ivrclientcore_is_hmd_present),
("IVRClientCore", "Init", ivrclientcore_init),
@ -401,6 +407,7 @@ method_overrides = [
("IVRRenderModels", "LoadIntoTextureD3D11_Async", ivrrendermodels_load_into_texture_d3d11_async),
("IVRMailbox", "undoc3", ivrmailbox_undoc3),
("IVROverlay", "SetOverlayTexture", ivroverlay_set_overlay_texture),
("IVRInput", "GetDigitalActionData", ivrinput_get_digital_action_data),
]
method_overrides_data = [
@ -470,6 +477,7 @@ def handle_method(cfile, classname, winclassname, cppname, method, cpp, cpp_h, e
unnamed = 'a'
do_lin_to_win = None
do_win_to_lin = None
do_size_fixup = None
do_wrap = None
do_unwrap = None
need_convert = []
@ -498,6 +506,10 @@ def handle_method(cfile, classname, winclassname, cppname, method, cpp, cpp_h, e
do_lin_to_win = (strip_const(strip_ns(real_type.get_canonical().spelling)), param.spelling)
#preserve pointers
typename = typename.replace(strip_ns(real_type.spelling), "win%s_%s" % (strip_ns(real_type.get_canonical().spelling), display_sdkver(sdkver)))
elif real_type.get_canonical().kind == clang.cindex.TypeKind.RECORD and \
strip_ns(real_type.spelling) in next_is_size_structs and \
struct_needs_size_adjustment(real_type.get_canonical()):
do_size_fixup = (strip_const(strip_ns(real_type.get_canonical().spelling)), param.spelling)
if param.spelling == "":
cfile.write(", %s _%s" % (typename, unnamed))
@ -588,6 +600,7 @@ def handle_method(cfile, classname, winclassname, cppname, method, cpp, cpp_h, e
unnamed = 'a'
first = True
next_is_size = False
next_is_size_no_conv = False
convert_size_param = ""
for param in get_params(method):
if not first:
@ -614,15 +627,24 @@ def handle_method(cfile, classname, winclassname, cppname, method, cpp, cpp_h, e
elif path_conv and param.spelling in path_conv["w2l_names"]:
cfile.write(", %s ? lin_%s : NULL" % (param.spelling, param.spelling))
cpp.write("(%s)%s" % (param.type.spelling, param.spelling))
elif do_size_fixup and do_size_fixup[1] == param.spelling:
next_is_size = True
next_is_size_no_conv = True
cfile.write(", %s" % param.spelling)
cpp.write("(%s)%s" % (param.type.spelling, param.spelling))
elif next_is_size:
cfile.write(", %s" % param.spelling)
next_is_size = False
if param.type.spelling == "uint32_t":
if next_is_size_no_conv and param.type.spelling == "uint32_t":
cpp.write("std::min(%s, (uint32_t)sizeof(vr::%s))" % (param.spelling, do_size_fixup[0]))
convert_size_param = ", " + param.spelling
elif param.type.spelling == "uint32_t":
cpp.write("%s ? sizeof(lin) : 0" % param.spelling)
convert_size_param = ", " + param.spelling
else:
cpp.write("(%s)%s" % (param.type.spelling, param.spelling))
convert_size_param = ", -1"
next_is_size_no_conv = False
elif "&" in param.type.spelling:
cfile.write(", %s" % param.spelling)
cpp.write("*%s" % param.spelling)
@ -884,15 +906,21 @@ def struct_needs_conversion_nocache(struct):
# if strip_const(struct.spelling) in manually_handled_structs:
# return True
needs_size_adjustment = False
#check 32-bit compat
windows_struct = find_windows_struct(struct)
assert(not windows_struct is None) #must find windows_struct
for field in struct.get_fields():
if struct.get_offset(field.spelling) != windows_struct.get_offset(field.spelling):
return True
return True, False
if field.type.get_canonical().kind == clang.cindex.TypeKind.RECORD and \
struct_needs_conversion(field.type.get_canonical()):
return True
return True, False
assert(struct.get_size() <= windows_struct.get_size())
if struct.get_size() < windows_struct.get_size():
needs_size_adjustment = True
#check 64-bit compat
windows_struct = find_windows64_struct(struct)
@ -901,20 +929,32 @@ def struct_needs_conversion_nocache(struct):
assert(not lin64_struct is None) #must find lin64_struct
for field in lin64_struct.get_fields():
if lin64_struct.get_offset(field.spelling) != windows_struct.get_offset(field.spelling):
return True
return True, False
if field.type.get_canonical().kind == clang.cindex.TypeKind.RECORD and \
struct_needs_conversion(field.type.get_canonical()):
return True
return True, False
return False
assert(lin64_struct.get_size() <= windows_struct.get_size())
if lin64_struct.get_size() < windows_struct.get_size():
needs_size_adjustment = True
return False, needs_size_adjustment
def struct_needs_conversion(struct):
if not sdkver in struct_conversion_cache:
struct_conversion_cache[sdkver] = {}
struct_needs_size_adjustment_cache[sdkver] = {}
if not strip_const(struct.spelling) in struct_conversion_cache[sdkver]:
struct_conversion_cache[sdkver][strip_const(struct.spelling)] = struct_needs_conversion_nocache(struct)
struct_conversion_cache[sdkver][strip_const(struct.spelling)], \
struct_needs_size_adjustment_cache[sdkver][strip_const(struct.spelling)] = \
struct_needs_conversion_nocache(struct)
return struct_conversion_cache[sdkver][strip_const(struct.spelling)]
def struct_needs_size_adjustment(struct):
return not struct_needs_conversion(struct) and struct_needs_size_adjustment_cache[sdkver][strip_const(struct.spelling)]
def get_field_attribute_str(field):
ftype = field.type.get_canonical()
if ftype.kind != clang.cindex.TypeKind.RECORD:

View File

@ -109,7 +109,7 @@ vr::EVRInputError cppIVRInput_IVRInput_003_GetOriginLocalizedName(void *linux_si
vr::EVRInputError cppIVRInput_IVRInput_003_GetOriginTrackedDeviceInfo(void *linux_side, VRInputValueHandle_t origin, InputOriginInfo_t * pOriginInfo, uint32_t unOriginInfoSize)
{
return ((IVRInput*)linux_side)->GetOriginTrackedDeviceInfo((vr::VRInputValueHandle_t)origin, (vr::InputOriginInfo_t *)pOriginInfo, (uint32_t)unOriginInfoSize);
return ((IVRInput*)linux_side)->GetOriginTrackedDeviceInfo((vr::VRInputValueHandle_t)origin, (vr::InputOriginInfo_t *)pOriginInfo, std::min(unOriginInfoSize, (uint32_t)sizeof(vr::InputOriginInfo_t)));
}
vr::EVRInputError cppIVRInput_IVRInput_003_ShowActionOrigins(void *linux_side, VRActionSetHandle_t actionSetHandle, VRActionHandle_t ulActionHandle)

View File

@ -114,7 +114,7 @@ vr::EVRInputError cppIVRInput_IVRInput_004_GetOriginLocalizedName(void *linux_si
vr::EVRInputError cppIVRInput_IVRInput_004_GetOriginTrackedDeviceInfo(void *linux_side, VRInputValueHandle_t origin, InputOriginInfo_t * pOriginInfo, uint32_t unOriginInfoSize)
{
return ((IVRInput*)linux_side)->GetOriginTrackedDeviceInfo((vr::VRInputValueHandle_t)origin, (vr::InputOriginInfo_t *)pOriginInfo, (uint32_t)unOriginInfoSize);
return ((IVRInput*)linux_side)->GetOriginTrackedDeviceInfo((vr::VRInputValueHandle_t)origin, (vr::InputOriginInfo_t *)pOriginInfo, std::min(unOriginInfoSize, (uint32_t)sizeof(vr::InputOriginInfo_t)));
}
vr::EVRInputError cppIVRInput_IVRInput_004_ShowActionOrigins(void *linux_side, VRActionSetHandle_t actionSetHandle, VRActionHandle_t ulActionHandle)

View File

@ -144,7 +144,7 @@ vr::EVRInputError cppIVRInput_IVRInput_005_GetOriginLocalizedName(void *linux_si
vr::EVRInputError cppIVRInput_IVRInput_005_GetOriginTrackedDeviceInfo(void *linux_side, VRInputValueHandle_t origin, InputOriginInfo_t * pOriginInfo, uint32_t unOriginInfoSize)
{
return ((IVRInput*)linux_side)->GetOriginTrackedDeviceInfo((vr::VRInputValueHandle_t)origin, (vr::InputOriginInfo_t *)pOriginInfo, (uint32_t)unOriginInfoSize);
return ((IVRInput*)linux_side)->GetOriginTrackedDeviceInfo((vr::VRInputValueHandle_t)origin, (vr::InputOriginInfo_t *)pOriginInfo, std::min(unOriginInfoSize, (uint32_t)sizeof(vr::InputOriginInfo_t)));
}
vr::EVRInputError cppIVRInput_IVRInput_005_ShowActionOrigins(void *linux_side, VRActionSetHandle_t actionSetHandle, VRActionHandle_t ulActionHandle)

View File

@ -156,7 +156,7 @@ vr::EVRInputError cppIVRInput_IVRInput_006_GetOriginLocalizedName(void *linux_si
vr::EVRInputError cppIVRInput_IVRInput_006_GetOriginTrackedDeviceInfo(void *linux_side, VRInputValueHandle_t origin, InputOriginInfo_t * pOriginInfo, uint32_t unOriginInfoSize)
{
return ((IVRInput*)linux_side)->GetOriginTrackedDeviceInfo((vr::VRInputValueHandle_t)origin, (vr::InputOriginInfo_t *)pOriginInfo, (uint32_t)unOriginInfoSize);
return ((IVRInput*)linux_side)->GetOriginTrackedDeviceInfo((vr::VRInputValueHandle_t)origin, (vr::InputOriginInfo_t *)pOriginInfo, std::min(unOriginInfoSize, (uint32_t)sizeof(vr::InputOriginInfo_t)));
}
vr::EVRInputError cppIVRInput_IVRInput_006_ShowActionOrigins(void *linux_side, VRActionSetHandle_t actionSetHandle, VRActionHandle_t ulActionHandle)

View File

@ -156,7 +156,7 @@ vr::EVRInputError cppIVRInput_IVRInput_007_GetOriginLocalizedName(void *linux_si
vr::EVRInputError cppIVRInput_IVRInput_007_GetOriginTrackedDeviceInfo(void *linux_side, VRInputValueHandle_t origin, InputOriginInfo_t * pOriginInfo, uint32_t unOriginInfoSize)
{
return ((IVRInput*)linux_side)->GetOriginTrackedDeviceInfo((vr::VRInputValueHandle_t)origin, (vr::InputOriginInfo_t *)pOriginInfo, (uint32_t)unOriginInfoSize);
return ((IVRInput*)linux_side)->GetOriginTrackedDeviceInfo((vr::VRInputValueHandle_t)origin, (vr::InputOriginInfo_t *)pOriginInfo, std::min(unOriginInfoSize, (uint32_t)sizeof(vr::InputOriginInfo_t)));
}
vr::EVRInputError cppIVRInput_IVRInput_007_GetActionBindingInfo(void *linux_side, VRActionHandle_t action, InputBindingInfo_t * pOriginInfo, uint32_t unBindingInfoSize, uint32_t unBindingInfoCount, uint32_t * punReturnedBindingInfoCount)

View File

@ -166,7 +166,7 @@ vr::EVRInputError cppIVRInput_IVRInput_010_GetOriginLocalizedName(void *linux_si
vr::EVRInputError cppIVRInput_IVRInput_010_GetOriginTrackedDeviceInfo(void *linux_side, VRInputValueHandle_t origin, InputOriginInfo_t * pOriginInfo, uint32_t unOriginInfoSize)
{
return ((IVRInput*)linux_side)->GetOriginTrackedDeviceInfo((vr::VRInputValueHandle_t)origin, (vr::InputOriginInfo_t *)pOriginInfo, (uint32_t)unOriginInfoSize);
return ((IVRInput*)linux_side)->GetOriginTrackedDeviceInfo((vr::VRInputValueHandle_t)origin, (vr::InputOriginInfo_t *)pOriginInfo, std::min(unOriginInfoSize, (uint32_t)sizeof(vr::InputOriginInfo_t)));
}
vr::EVRInputError cppIVRInput_IVRInput_010_GetActionBindingInfo(void *linux_side, VRActionHandle_t action, InputBindingInfo_t * pOriginInfo, uint32_t unBindingInfoSize, uint32_t unBindingInfoCount, uint32_t * punReturnedBindingInfoCount)

View File

@ -1,4 +1,6 @@
#ifndef __cplusplus
#ifdef __cplusplus
#include <algorithm>
#else
#ifndef bool
typedef char bool; /* 1 byte on modern visual studio c++ */
#endif

View File

@ -59,6 +59,20 @@ static struct
#endif
BOOL d3d11_explicit_handoff, handoff_called;
void *client_core_linux_side;
#ifndef __x86_64__
/* Digital action state change fixup hack. */
struct
{
VRActionHandle_t action;
VRInputValueHandle_t origin;
LARGE_INTEGER update_qpf_time;
BOOL previous_state;
}
digital_actions_state[128];
unsigned int digital_action_count;
LARGE_INTEGER qpf_freq;
#endif
}
compositor_data;
@ -1721,3 +1735,93 @@ vrmb_typeb ivrmailbox_undoc3(
return r;
}
#pragma pack(push, 8)
struct winInputDigitalActionData_t {
bool bActive;
VRInputValueHandle_t activeOrigin;
bool bState;
bool bChanged;
float fUpdateTime;
} __attribute__ ((ms_struct));
#pragma pack(pop)
EVRInputError ivrinput_get_digital_action_data(
void *func,
void *linux_side, VRActionHandle_t action_handle, void *action_data, uint32_t action_data_size,
VRInputValueHandle_t restrict_to_device, unsigned int version)
{
EVRInputError (*cpp_func)(void *, VRActionHandle_t, struct winInputDigitalActionData_t *, uint32_t, VRInputValueHandle_t) = func;
#ifdef __x86_64__
return cpp_func(linux_side, action_handle, action_data, action_data_size, restrict_to_device);
#else
/* Digital action state change fixup hack. */
struct winInputDigitalActionData_t *data = action_data;
LARGE_INTEGER qpf;
EVRInputError ret;
unsigned int i;
ret = cpp_func(linux_side, action_handle, action_data, action_data_size, restrict_to_device);
TRACE("handle %s, data %p, data_size %u, restrict %s, origin %s, state %#x, changed %#x, ret %u, active %#x.\n",
wine_dbgstr_longlong(action_handle), action_data, action_data_size,
wine_dbgstr_longlong(restrict_to_device), wine_dbgstr_longlong(data->activeOrigin),
data->bState, data->bChanged, ret, data->bActive);
if (ret)
return ret;
if (action_data_size != sizeof(*data))
{
WARN("Unexpected action_data_size %u.\n", action_data_size);
return 0;
}
if (!data->bActive)
return 0;
if (!compositor_data.qpf_freq.QuadPart)
QueryPerformanceFrequency(&compositor_data.qpf_freq);
QueryPerformanceCounter(&qpf);
for (i = 0; i < compositor_data.digital_action_count; ++i)
{
if (compositor_data.digital_actions_state[i].action == action_handle
&& compositor_data.digital_actions_state[i].origin == data->activeOrigin)
{
if ((data->bChanged = (!compositor_data.digital_actions_state[i].previous_state != !data->bState)))
{
TRACE("action %s (%s) changed to %#x, data->fUpdateTime %f.\n", wine_dbgstr_longlong(action_handle),
wine_dbgstr_longlong(restrict_to_device), data->bState, data->fUpdateTime);
compositor_data.digital_actions_state[i].update_qpf_time = qpf;
compositor_data.digital_actions_state[i].previous_state = data->bState;
}
if (compositor_data.digital_actions_state[i].update_qpf_time.QuadPart)
data->fUpdateTime = -(float)(qpf.QuadPart
- compositor_data.digital_actions_state[i].update_qpf_time.QuadPart)
/ compositor_data.qpf_freq.QuadPart;
return 0;
}
}
if (i == ARRAY_SIZE(compositor_data.digital_actions_state))
{
static unsigned int once;
if (!once++)
WARN("Too many actions.\n");
return 0;
}
compositor_data.digital_actions_state[i].action = action_handle;
compositor_data.digital_actions_state[i].origin = data->activeOrigin;
compositor_data.digital_actions_state[i].previous_state = data->bState;
compositor_data.digital_actions_state[i].update_qpf_time = qpf;
++compositor_data.digital_action_count;
return 0;
#endif
}

View File

@ -172,6 +172,11 @@ EVROverlayError ivroverlay_001_set_overlay_texture(
void *linux_side, VROverlayHandle_t overlayHandle, void *texture,
unsigned int version);
EVRInputError ivrinput_get_digital_action_data(
void *func,
void *linux_side, VRActionHandle_t action_handle, void *action_data, uint32_t action_data_size,
VRInputValueHandle_t restrict_to_device, unsigned int version);
#endif /* __cplusplus */
#define TRACE WINE_TRACE

View File

@ -66,7 +66,7 @@ DEFINE_THISCALL_WRAPPER(winIVRInput_IVRInput_010_GetDigitalActionData, 28)
EVRInputError __thiscall winIVRInput_IVRInput_010_GetDigitalActionData(winIVRInput_IVRInput_010 *_this, VRActionHandle_t action, winInputDigitalActionData_t_1168 * pActionData, uint32_t unActionDataSize, VRInputValueHandle_t ulRestrictToDevice)
{
TRACE("%p\n", _this);
return cppIVRInput_IVRInput_010_GetDigitalActionData(_this->linux_side, action, pActionData, unActionDataSize, ulRestrictToDevice);
return ivrinput_get_digital_action_data(cppIVRInput_IVRInput_010_GetDigitalActionData, _this->linux_side, action, pActionData, unActionDataSize, ulRestrictToDevice, 10);
}
DEFINE_THISCALL_WRAPPER(winIVRInput_IVRInput_010_GetAnalogActionData, 28)
@ -413,7 +413,7 @@ DEFINE_THISCALL_WRAPPER(winIVRInput_IVRInput_007_GetDigitalActionData, 28)
EVRInputError __thiscall winIVRInput_IVRInput_007_GetDigitalActionData(winIVRInput_IVRInput_007 *_this, VRActionHandle_t action, winInputDigitalActionData_t_1916 * pActionData, uint32_t unActionDataSize, VRInputValueHandle_t ulRestrictToDevice)
{
TRACE("%p\n", _this);
return cppIVRInput_IVRInput_007_GetDigitalActionData(_this->linux_side, action, pActionData, unActionDataSize, ulRestrictToDevice);
return ivrinput_get_digital_action_data(cppIVRInput_IVRInput_007_GetDigitalActionData, _this->linux_side, action, pActionData, unActionDataSize, ulRestrictToDevice, 7);
}
DEFINE_THISCALL_WRAPPER(winIVRInput_IVRInput_007_GetAnalogActionData, 28)
@ -724,7 +724,7 @@ DEFINE_THISCALL_WRAPPER(winIVRInput_IVRInput_006_GetDigitalActionData, 28)
EVRInputError __thiscall winIVRInput_IVRInput_006_GetDigitalActionData(winIVRInput_IVRInput_006 *_this, VRActionHandle_t action, winInputDigitalActionData_t_1418 * pActionData, uint32_t unActionDataSize, VRInputValueHandle_t ulRestrictToDevice)
{
TRACE("%p\n", _this);
return cppIVRInput_IVRInput_006_GetDigitalActionData(_this->linux_side, action, pActionData, unActionDataSize, ulRestrictToDevice);
return ivrinput_get_digital_action_data(cppIVRInput_IVRInput_006_GetDigitalActionData, _this->linux_side, action, pActionData, unActionDataSize, ulRestrictToDevice, 6);
}
DEFINE_THISCALL_WRAPPER(winIVRInput_IVRInput_006_GetAnalogActionData, 28)
@ -1017,7 +1017,7 @@ DEFINE_THISCALL_WRAPPER(winIVRInput_IVRInput_005_GetDigitalActionData, 28)
EVRInputError __thiscall winIVRInput_IVRInput_005_GetDigitalActionData(winIVRInput_IVRInput_005 *_this, VRActionHandle_t action, winInputDigitalActionData_t_1322 * pActionData, uint32_t unActionDataSize, VRInputValueHandle_t ulRestrictToDevice)
{
TRACE("%p\n", _this);
return cppIVRInput_IVRInput_005_GetDigitalActionData(_this->linux_side, action, pActionData, unActionDataSize, ulRestrictToDevice);
return ivrinput_get_digital_action_data(cppIVRInput_IVRInput_005_GetDigitalActionData, _this->linux_side, action, pActionData, unActionDataSize, ulRestrictToDevice, 5);
}
DEFINE_THISCALL_WRAPPER(winIVRInput_IVRInput_005_GetAnalogActionData, 28)
@ -1301,7 +1301,7 @@ DEFINE_THISCALL_WRAPPER(winIVRInput_IVRInput_004_GetDigitalActionData, 28)
EVRInputError __thiscall winIVRInput_IVRInput_004_GetDigitalActionData(winIVRInput_IVRInput_004 *_this, VRActionHandle_t action, winInputDigitalActionData_t_1017 * pActionData, uint32_t unActionDataSize, VRInputValueHandle_t ulRestrictToDevice)
{
TRACE("%p\n", _this);
return cppIVRInput_IVRInput_004_GetDigitalActionData(_this->linux_side, action, pActionData, unActionDataSize, ulRestrictToDevice);
return ivrinput_get_digital_action_data(cppIVRInput_IVRInput_004_GetDigitalActionData, _this->linux_side, action, pActionData, unActionDataSize, ulRestrictToDevice, 4);
}
DEFINE_THISCALL_WRAPPER(winIVRInput_IVRInput_004_GetAnalogActionData, 28)

2
wine

@ -1 +1 @@
Subproject commit eef39a6e9c0a9b939521c7a5119225b4823b83cc
Subproject commit ddf89dae5b5b000df51daf558177d663522811e8