mirror of
https://github.com/ValveSoftware/Proton.git
synced 2025-07-31 17:41:48 +03:00
Compare commits
30 Commits
proton_8.0
...
experiment
Author | SHA1 | Date | |
---|---|---|---|
|
c7b27f6faf | ||
|
4ed2f6b3f5 | ||
|
46a5b82b42 | ||
|
e38ee87f29 | ||
|
5eed0520ad | ||
|
aa55eeba6e | ||
|
53c423a172 | ||
|
83beb8f724 | ||
|
2f3b330622 | ||
|
72a3cf5808 | ||
|
71bc07d080 | ||
|
eab998fcd3 | ||
|
1e0b6d5616 | ||
|
aa0fbb9bf6 | ||
|
b2e81d6b62 | ||
|
053adfa8dc | ||
|
a1c7137bd8 | ||
|
a7580816c3 | ||
|
b5d5d895ba | ||
|
e0cc68f311 | ||
|
b5f3c21d68 | ||
|
0cebe88f1e | ||
|
fea280bca7 | ||
|
11979b98b7 | ||
|
0c108269f6 | ||
|
03d891e51a | ||
|
92c04a6f4c | ||
|
8ac3356904 | ||
|
740d99130b | ||
|
7a42fab891 |
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -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
|
||||
|
35
Makefile
35
Makefile
@ -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 $@
|
||||
|
@ -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. |
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
2
dxvk
@ -1 +1 @@
|
||||
Subproject commit 726b2138c42825407402c200d9ca495aecbdc96b
|
||||
Subproject commit ef569a514deb75ca17098c9ddc0108df91e8e7b5
|
1
dxvk-nvapi
Submodule
1
dxvk-nvapi
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 8b3987f6707946b9202eda3dda38632197d2286b
|
5
fonts/patches/MSGothic-FontMenuNameDB
Normal file
5
fonts/patches/MSGothic-FontMenuNameDB
Normal 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
|
5
fonts/patches/MSPGothic-FontMenuNameDB
Normal file
5
fonts/patches/MSPGothic-FontMenuNameDB
Normal 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
|
5
fonts/patches/MSUIGothic-FontMenuNameDB
Normal file
5
fonts/patches/MSUIGothic-FontMenuNameDB
Normal 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
|
5
fonts/patches/Malgun-FontMenuNameDB
Normal file
5
fonts/patches/Malgun-FontMenuNameDB
Normal 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
|
5
fonts/patches/NSimSun-FontMenuNameDB
Normal file
5
fonts/patches/NSimSun-FontMenuNameDB
Normal file
@ -0,0 +1,5 @@
|
||||
[SourceHanSansSC-Regular]
|
||||
f=3,1,0x804,\65B0\5B8B\4F53
|
||||
s=3,1,0x804,\5E38\89C4
|
||||
f=NSimSun
|
||||
s=Regular
|
5
fonts/patches/SimSun-FontMenuNameDB
Normal file
5
fonts/patches/SimSun-FontMenuNameDB
Normal file
@ -0,0 +1,5 @@
|
||||
[SourceHanSansSC-Regular]
|
||||
f=3,1,0x804,\5B8B\4F53
|
||||
s=3,1,0x804,\5E38\89C4
|
||||
f=SimSun
|
||||
s=Regular
|
14791
fonts/source-han-sans/SourceHanSans_JP_sequences.txt
Normal file
14791
fonts/source-han-sans/SourceHanSans_JP_sequences.txt
Normal file
File diff suppressed because it is too large
Load Diff
326
fonts/source-han-sans/SourceHanSans_KR_sequences.txt
Normal file
326
fonts/source-han-sans/SourceHanSans_KR_sequences.txt
Normal 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
|
15927
fonts/source-han-sans/UniSourceHanSansJP-UTF32-H
Normal file
15927
fonts/source-han-sans/UniSourceHanSansJP-UTF32-H
Normal file
File diff suppressed because it is too large
Load Diff
16111
fonts/source-han-sans/UniSourceHanSansKR-UTF32-H
Normal file
16111
fonts/source-han-sans/UniSourceHanSansKR-UTF32-H
Normal file
File diff suppressed because it is too large
Load Diff
104821
fonts/source-han-sans/cidfont.ps.OTC.J
Normal file
104821
fonts/source-han-sans/cidfont.ps.OTC.J
Normal file
File diff suppressed because it is too large
Load Diff
104821
fonts/source-han-sans/cidfont.ps.OTC.K
Normal file
104821
fonts/source-han-sans/cidfont.ps.OTC.K
Normal file
File diff suppressed because it is too large
Load Diff
22
fonts/source-han-sans/cidfontinfo.OTC.J
Normal file
22
fonts/source-han-sans/cidfontinfo.OTC.J
Normal 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
|
22
fonts/source-han-sans/cidfontinfo.OTC.K
Normal file
22
fonts/source-han-sans/cidfontinfo.OTC.K
Normal 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
|
44513
fonts/source-han-sans/features.OTC.J
Normal file
44513
fonts/source-han-sans/features.OTC.J
Normal file
File diff suppressed because it is too large
Load Diff
43138
fonts/source-han-sans/features.OTC.K
Normal file
43138
fonts/source-han-sans/features.OTC.K
Normal file
File diff suppressed because it is too large
Load Diff
204
proton
204
proton
@ -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
116
steampipe_fixups.py
Executable 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
|
@ -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:
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -1,4 +1,6 @@
|
||||
#ifndef __cplusplus
|
||||
#ifdef __cplusplus
|
||||
#include <algorithm>
|
||||
#else
|
||||
#ifndef bool
|
||||
typedef char bool; /* 1 byte on modern visual studio c++ */
|
||||
#endif
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
2
wine
@ -1 +1 @@
|
||||
Subproject commit eef39a6e9c0a9b939521c7a5119225b4823b83cc
|
||||
Subproject commit ddf89dae5b5b000df51daf558177d663522811e8
|
Loading…
x
Reference in New Issue
Block a user