Compare commits

...

27 Commits

Author SHA1 Message Date
Andrew Eikum
a796f297cd update vkd3d-proton to v2.3.1-39-gec5b4cce 2021-06-02 13:13:48 -05:00
Andrew Eikum
81abc3d9f1 update wine 2021-06-02 13:13:48 -05:00
Liam Middlebrook
f7d1e4aee5 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-02 13:13:48 -05:00
Liam Middlebrook
327e5fe94d 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-02 13:13:47 -05:00
Andrew Eikum
5a30a04562 proton: Use DXVK's DXGI by default 2021-06-02 13:10:23 -05:00
Andrew Eikum
622beb876e update dxvk to v1.8.1-137-gf4cbc9ae 2021-06-02 13:10:23 -05:00
Andrew Eikum
22c42cd43d Makefile: Don't consider proton-sdk tags for build name 2021-06-02 13:10:23 -05:00
Giovanni Mascellani
c287de9b0f
docker: Install Capstone development files. 2021-05-28 12:12:02 +02:00
Andrew Eikum
c82f15be51
update wine 2021-05-28 12:12:02 +02:00
Andrew Eikum
c16db69537
update dxvk to v1.8.1-84-gc5108006 2021-05-28 12:12:02 +02:00
Rémi Bernon
c913122960
docker: Add python3-pefile package to SDK image. 2021-05-28 12:12:01 +02:00
Rémi Bernon
df0b2ceaf7
docker: Don't install tini, it's already there now. 2021-05-28 12:12:01 +02:00
Rémi Bernon
a60b494afd
docker: Install libxpresent-dev packages. 2021-05-28 12:12:01 +02:00
Rémi Bernon
c214de457c
docker: Bump steamrt version to 0.20210505.0. 2021-05-28 12:12:01 +02:00
Andrew Eikum
383977e6cb
update wine 2021-05-28 12:12:01 +02:00
Andrew Eikum
9cf3679c0e
update dxvk 2021-05-28 12:12:00 +02:00
Andrew Eikum
9e513d238e
update vkd3d-proton to v2.3.1-8-g8734589e 2021-05-28 12:12:00 +02:00
Andrew Eikum
cbb3d2a0a9
Handle steampipe quirks in deploy builds 2021-05-28 12:12:00 +02:00
Andrew Eikum
e7b8fedd00
Don't ship filenames with colons in them 2021-05-28 12:11:59 +02:00
Andrew Eikum
b263b86894
Don't ship proton dist files in a tarball anymore 2021-05-28 12:11:57 +02:00
Rémi Bernon
dc318f58c0
build: Cleanup target directories before building.
And force copy artifacts after.
2021-05-28 12:10:35 +02:00
Rémi Bernon
c0ea64ec95
build: Use jobs to control xargs parallelism. 2021-05-28 11:11:18 +02:00
Rémi Bernon
46e9ab5bf3
build: Make silent builds actually quiet. 2021-05-28 11:11:18 +02:00
Paul Gofman
b70ae9094b
build: Fixup PE section headers.
For FH4.
2021-05-28 11:11:17 +02:00
Rémi Bernon
ccde2554ce
build: Build with Proton SDK 0.20210505.0-2.
But disable XPresent extension for now.
2021-05-28 11:11:11 +02:00
Paul Gofman
be905ab339 wineopenxr: Update to 1.0.15 registry version. 2021-05-27 21:44:39 +03:00
Andrew Eikum
d611ab8a5f proton: Add PROTON_CRASH_REPORT_DIR runtime config
CW-Bug-Id: #18905
2021-05-27 13:43:12 -05:00
23 changed files with 1138 additions and 348 deletions

3
.gitmodules vendored
View File

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

View File

@ -18,7 +18,7 @@ BUILD_DIR := "build-$(shell echo $(_build_name) | sed -e 's/ /_/g')"
STEAM_DIR := $(HOME)/.steam/root STEAM_DIR := $(HOME)/.steam/root
ifeq ($(build_name),) ifeq ($(build_name),)
DEPLOY_DIR := $(shell git describe --tags --always) DEPLOY_DIR := $(shell git describe --tags --always --exclude proton-sdk*)
else else
DEPLOY_DIR := $(_build_name) DEPLOY_DIR := $(_build_name)
endif endif
@ -145,19 +145,24 @@ install-internal: downloads
install: install-internal install: install-internal
mkdir -p $(STEAM_DIR)/compatibilitytools.d/ 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/ 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" echo "Proton installed to your local Steam installation"
redist: | vagrant_share/$(DEPLOY_DIR) redist: | vagrant_share/$(DEPLOY_DIR)
redist: private SHELL := $(VAGRANT_SHELL) redist: private SHELL := $(VAGRANT_SHELL)
redist: downloads 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)" echo "Proton build available at vagrant_share/$(DEPLOY_DIR)"
deploy: | vagrant_share/$(DEPLOY_DIR)-deploy deploy: | vagrant_share/$(DEPLOY_DIR)-deploy
deploy: private SHELL := $(VAGRANT_SHELL) deploy: private SHELL := $(VAGRANT_SHELL)
deploy: downloads 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" echo "Proton deployed to vagrant_share/$(DEPLOY_DIR)-deploy"
module: | vagrant_share/$(module)/lib/wine/ module: | vagrant_share/$(module)/lib/wine/
@ -176,39 +181,47 @@ dxvk: | vagrant_share/dxvk/lib64/wine/dxvk
dxvk: private SHELL := $(VAGRANT_SHELL) dxvk: private SHELL := $(VAGRANT_SHELL)
dxvk: downloads dxvk: downloads
$(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) $(CCACHE_FLAG) dxvk && \ $(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/files/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/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/lib/wine/vkd3d-proton
vkd3d-proton: | vagrant_share/vkd3d-proton/lib64/wine/vkd3d-proton vkd3d-proton: | vagrant_share/vkd3d-proton/lib64/wine/vkd3d-proton
vkd3d-proton: private SHELL := $(VAGRANT_SHELL) vkd3d-proton: private SHELL := $(VAGRANT_SHELL)
vkd3d-proton: downloads vkd3d-proton: downloads
$(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) $(CCACHE_FLAG) vkd3d-proton && \ $(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/files/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/lib64/wine/vkd3d-proton/*.dll /vagrant/vkd3d-proton/lib64/wine/vkd3d-proton/
lsteamclient: | vagrant_share/lsteamclient/lib/wine lsteamclient: | vagrant_share/lsteamclient/lib/wine
lsteamclient: | vagrant_share/lsteamclient/lib64/wine lsteamclient: | vagrant_share/lsteamclient/lib64/wine
lsteamclient: private SHELL := $(VAGRANT_SHELL) lsteamclient: private SHELL := $(VAGRANT_SHELL)
lsteamclient: downloads lsteamclient: downloads
$(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) $(CCACHE_FLAG) lsteamclient && \ $(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/files/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/lib64/wine/lsteamclient.dll.so /vagrant/lsteamclient/lib64/wine
vrclient: | vagrant_share/vrclient/lib/wine vrclient: | vagrant_share/vrclient/lib/wine
vrclient: | vagrant_share/vrclient/lib64/wine vrclient: | vagrant_share/vrclient/lib64/wine
vrclient: private SHELL := $(VAGRANT_SHELL) vrclient: private SHELL := $(VAGRANT_SHELL)
vrclient: downloads vrclient: downloads
$(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) $(CCACHE_FLAG) vrclient && \ $(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/files/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/lib64/wine/vrclient_x64.dll.so /vagrant/vrclient/lib64/wine
wineopenxr: | vagrant_share/wineopenxr/lib/wine wineopenxr: | vagrant_share/wineopenxr/lib/wine
wineopenxr: | vagrant_share/wineopenxr/lib64/wine wineopenxr: | vagrant_share/wineopenxr/lib64/wine
wineopenxr: private SHELL := $(VAGRANT_SHELL) wineopenxr: private SHELL := $(VAGRANT_SHELL)
wineopenxr: downloads wineopenxr: downloads
$(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) $(CCACHE_FLAG) wineopenxr && \ $(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/%: vagrant_share/%:
mkdir -p $@ mkdir -p $@

View File

@ -273,12 +273,14 @@ the Wine prefix. Removing the option will revert to the previous behavior.
| | <tt>PROTON_LOG_DIR</tt> | Output log files into the directory specified. Defaults to your home directory. | | | <tt>PROTON_LOG_DIR</tt> | Output log files into the directory specified. Defaults to your home directory. |
| | <tt>PROTON_DUMP_DEBUG_COMMANDS</tt> | When running a game, Proton will write some useful debug scripts for that game into `$PROTON_DEBUG_DIR/proton_$USER/`. | | | <tt>PROTON_DUMP_DEBUG_COMMANDS</tt> | When running a game, Proton will write some useful debug scripts for that game into `$PROTON_DEBUG_DIR/proton_$USER/`. |
| | <tt>PROTON_DEBUG_DIR</tt> | Root directory for the Proton debug scripts, `/tmp` by default. | | | <tt>PROTON_DEBUG_DIR</tt> | Root directory for the Proton debug scripts, `/tmp` by default. |
| | <tt>PROTON_CRASH_REPORT_DIR</tt> | Write crash logs into this directory. Does not clean up old logs, so may eat all your disk space eventually. |
| <tt>wined3d</tt> | <tt>PROTON_USE_WINED3D</tt> | Use OpenGL-based wined3d instead of Vulkan-based DXVK for d3d11, d3d10, and d3d9. | | <tt>wined3d</tt> | <tt>PROTON_USE_WINED3D</tt> | Use OpenGL-based wined3d instead of Vulkan-based DXVK for d3d11, d3d10, and d3d9. |
| <tt>nod3d11</tt> | <tt>PROTON_NO_D3D11</tt> | Disable <tt>d3d11.dll</tt>, for d3d11 games which can fall back to and run better with d3d9. | | <tt>nod3d11</tt> | <tt>PROTON_NO_D3D11</tt> | Disable <tt>d3d11.dll</tt>, for d3d11 games which can fall back to and run better with d3d9. |
| <tt>nod3d10</tt> | <tt>PROTON_NO_D3D10</tt> | Disable <tt>d3d10.dll</tt> and <tt>dxgi.dll</tt>, for d3d10 games which can fall back to and run better with d3d9. | | <tt>nod3d10</tt> | <tt>PROTON_NO_D3D10</tt> | Disable <tt>d3d10.dll</tt> and <tt>dxgi.dll</tt>, for d3d10 games which can fall back to and run better with d3d9. |
| <tt>noesync</tt> | <tt>PROTON_NO_ESYNC</tt> | Do not use eventfd-based in-process synchronization primitives. | | <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>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>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>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>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. | | <tt>heapdelayfree</tt>| <tt>PROTON_HEAP_DELAY_FREE</tt>| Delay freeing some memory, to work around application use-after-free bugs. |

View File

@ -1,6 +1,15 @@
SRC := $(abspath $(SRCDIR)) SRC := $(abspath $(SRCDIR))
OBJ := $(abspath $(CURDIR)) OBJ := $(abspath $(CURDIR))
ifeq ($(filter s,$(MAKEFLAGS)),s)
MAKEFLAGS += --quiet --no-print-directory
--quiet? := --quiet
else
MFLAGS += V=1 VERBOSE=1
-v? := -v
--verbose? := --verbose
endif
## ##
## Nested make ## Nested make
## ##
@ -104,6 +113,8 @@ container-build:
all32 $(MAKECMDGOALS32): container-build all32 $(MAKECMDGOALS32): container-build
all64 $(MAKECMDGOALS64): container-build all64 $(MAKECMDGOALS64): container-build
else
J = $(patsubst -j%,%,$(filter -j%,$(MAKEFLAGS)))
endif endif
@ -125,7 +136,7 @@ endif
## ##
DST_BASE := $(OBJ)/dist DST_BASE := $(OBJ)/dist
DST_DIR := $(DST_BASE)/dist DST_DIR := $(DST_BASE)/files
DST_LIBDIR32 := $(DST_DIR)/lib DST_LIBDIR32 := $(DST_DIR)/lib
DST_LIBDIR64 := $(DST_DIR)/lib64 DST_LIBDIR64 := $(DST_DIR)/lib64
DEPLOY_DIR := ./deploy DEPLOY_DIR := ./deploy
@ -167,6 +178,7 @@ CARGO_BUILD_ARG := --release
COMPAT_MANIFEST_TEMPLATE := $(SRCDIR)/compatibilitytool.vdf.template COMPAT_MANIFEST_TEMPLATE := $(SRCDIR)/compatibilitytool.vdf.template
LICENSE := $(SRCDIR)/dist.LICENSE LICENSE := $(SRCDIR)/dist.LICENSE
OFL_LICENSE := $(SRCDIR)/fonts/liberation-fonts/LICENSE OFL_LICENSE := $(SRCDIR)/fonts/liberation-fonts/LICENSE
STEAMPIPE_FIXUPS_PY := $(SRCDIR)/steampipe_fixups.py
GECKO_VER := 2.47.2 GECKO_VER := 2.47.2
GECKO32_TARBALL := wine-gecko-$(GECKO_VER)-x86.tar.xz GECKO32_TARBALL := wine-gecko-$(GECKO_VER)-x86.tar.xz
@ -253,8 +265,9 @@ DIST_TARGETS := $(DIST_COPY_TARGETS) $(DIST_OVR32) $(DIST_OVR64) \
$(DIST_GECKO32) $(DIST_GECKO64) $(DIST_WINEMONO) \ $(DIST_GECKO32) $(DIST_GECKO64) $(DIST_WINEMONO) \
$(DIST_COMPAT_MANIFEST) $(DIST_LICENSE) $(DIST_TOOLMANIFEST) $(DIST_OFL_LICENSE) $(DIST_FONTS) $(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) BASE_COPY_TARGETS := $(DIST_COPY_TARGETS) $(DIST_VERSION) $(DIST_LICENSE) $(DIST_TOOLMANIFEST) $(DIST_OFL_LICENSE) $(DST_DIR)
REDIST_COPY_TARGETS := $(DEPLOY_COPY_TARGETS) $(DIST_COMPAT_MANIFEST) DEPLOY_COPY_TARGETS := $(BASE_COPY_TARGETS) $(STEAMPIPE_FIXUPS_PY)
REDIST_COPY_TARGETS := $(BASE_COPY_TARGETS) $(DIST_COMPAT_MANIFEST)
$(DIST_LICENSE): $(LICENSE) $(DIST_LICENSE): $(LICENSE)
cp -a $< $@ cp -a $< $@
@ -343,36 +356,36 @@ dist: $(DIST_TARGETS) all-dist dist_wineopenxr | $(DST_DIR)
echo `date '+%s'` `GIT_DIR=$(abspath $(SRCDIR)/.git) git describe --tags` > $(DIST_VERSION) echo `date '+%s'` `GIT_DIR=$(abspath $(SRCDIR)/.git) git describe --tags` > $(DIST_VERSION)
deploy: dist | $(filter-out dist deploy install redist,$(MAKECMDGOALS)) deploy: dist | $(filter-out dist deploy install redist,$(MAKECMDGOALS))
mkdir -p $(DEPLOY_DIR) && \ mkdir -p $(DEPLOY_DIR)
cp -a $(DEPLOY_COPY_TARGETS) $(DEPLOY_DIR) && \ cp -af --no-dereference --preserve=mode,links $(DEPLOY_COPY_TARGETS) $(DEPLOY_DIR)
tar -C $(DST_DIR) -c . > $(DEPLOY_DIR)/proton_dist.tar python3 $(STEAMPIPE_FIXUPS_PY) process $(DEPLOY_DIR)
@echo "Created deployment archive at "$(DEPLOY_DIR)"/proton_dist.tar"
install: dist | $(filter-out dist deploy install redist,$(MAKECMDGOALS)) 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 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) mkdir -p $(STEAM_DIR)/compatibilitytools.d/$(BUILD_NAME)
cp -rf --no-dereference --preserve=mode,links $(DST_BASE)/* $(STEAM_DIR)/compatibilitytools.d/$(BUILD_NAME) cp -af --no-dereference --preserve=mode,links $(DST_BASE)/* $(STEAM_DIR)/compatibilitytools.d/$(BUILD_NAME)
cp -f $(DIST_VERSION) $(STEAM_DIR)/compatibilitytools.d/$(BUILD_NAME)/dist/
@echo "Installed Proton to "$(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" @echo "You may need to restart Steam to select this tool"
redist: dist | $(filter-out dist deploy install redist,$(MAKECMDGOALS)) redist: dist | $(filter-out dist deploy install redist,$(MAKECMDGOALS))
mkdir -p $(REDIST_DIR) mkdir -p $(REDIST_DIR)
cp -a $(REDIST_COPY_TARGETS) $(REDIST_DIR) cp -af --no-dereference --preserve=mode,links $(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"
.PHONY: module32 module64 module .PHONY: module32 module64 module
module32: private SHELL := $(CONTAINER_SHELL) module32: private SHELL := $(CONTAINER_SHELL)
module32: CONTAINERGOALS := $(CONTAINERGOALS) wine-configure32 module32: CONTAINERGOALS := $(CONTAINERGOALS) wine-configure32
module32: | all-source wine-configure32 module32: | all-source wine-configure32
+$(MAKE) -j$(J) $(filter -j%,$(MAKEFLAGS)) $(MFLAGS) $(MAKEOVERRIDES) -C $(WINE_OBJ32)/dlls/$(module) +$(MAKE) -j$(J) $(filter -j%,$(MAKEFLAGS)) $(MFLAGS) $(MAKEOVERRIDES) -C $(WINE_OBJ32)/dlls/$(module) && \
find $(WINE_OBJ32)/dlls/$(module) -type f -name '*.dll' -printf '%p\0' | \
xargs $(--verbose?) -0 -r -P$(J) -n1 $(SRC)/make/pefixup.py
module64: private SHELL := $(CONTAINER_SHELL) module64: private SHELL := $(CONTAINER_SHELL)
module64: CONTAINERGOALS := $(CONTAINERGOALS) wine-configure64 module64: CONTAINERGOALS := $(CONTAINERGOALS) wine-configure64
module64: | all-source wine-configure64 module64: | all-source wine-configure64
+$(MAKE) -j$(J) $(filter -j%,$(MAKEFLAGS)) $(MFLAGS) $(MAKEOVERRIDES) -C $(WINE_OBJ64)/dlls/$(module) +$(MAKE) -j$(J) $(filter -j%,$(MAKEFLAGS)) $(MFLAGS) $(MAKEOVERRIDES) -C $(WINE_OBJ64)/dlls/$(module) && \
find $(WINE_OBJ64)/dlls/$(module) -type f -name '*.dll' -printf '%p\0' | \
xargs $(--verbose?) -0 -r -P$(J) -n1 $(SRC)/make/pefixup.py
module: CONTAINERGOALS := $(CONTAINERGOALS) wine-configure module: CONTAINERGOALS := $(CONTAINERGOALS) wine-configure
module: | all-source wine-configure module: | all-source wine-configure
@ -633,6 +646,7 @@ WINE_SOURCE_ARGS = \
WINE_CONFIGURE_ARGS = \ WINE_CONFIGURE_ARGS = \
--with-mingw \ --with-mingw \
--without-xpresent \
--disable-tests --disable-tests
WINE_CONFIGURE_ARGS64 = --enable-win64 WINE_CONFIGURE_ARGS64 = --enable-win64
@ -717,6 +731,32 @@ $(OBJ)/.dxvk-post-build32:
touch $@ 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 ## vkd3d-proton
## ##

View File

@ -97,7 +97,7 @@ function configure() {
# #
arg_steamrt="soldier" arg_steamrt="soldier"
arg_protonsdk_image="registry.gitlab.steamos.cloud/proton/soldier/sdk:0.20210126.1-1" arg_protonsdk_image="registry.gitlab.steamos.cloud/proton/soldier/sdk:0.20210505.0-2"
arg_no_protonsdk="" arg_no_protonsdk=""
arg_build_name="" arg_build_name=""
arg_docker_opts="" arg_docker_opts=""

View File

@ -73,6 +73,14 @@ def setup_dll_symlinks(default_pfx_dir, dist_dir):
os.unlink(filename) os.unlink(filename)
make_relative_symlink(target, 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): def make_default_pfx(default_pfx_dir, dist_dir, runtime):
local_env = dict(os.environ) local_env = dict(os.environ)
@ -96,6 +104,7 @@ def make_default_pfx(default_pfx_dir, dist_dir, runtime):
env=local_env, check=True) env=local_env, check=True)
setup_dll_symlinks(default_pfx_dir, dist_dir) setup_dll_symlinks(default_pfx_dir, dist_dir)
fixup_drive_links(default_pfx_dir)
if __name__ == '__main__': if __name__ == '__main__':
import sys import sys

View File

@ -1,4 +1,4 @@
STEAMRT_VERSION = 0.20210126.1 STEAMRT_VERSION = 0.20210505.0
STEAMRT_URLBASE = registry.gitlab.steamos.cloud STEAMRT_URLBASE = registry.gitlab.steamos.cloud
PROTONSDK_URLBASE = $(STEAMRT_URLBASE)/proton/soldier/sdk 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 ENV PATH=/usr/lib/ccache:$PATH
RUN apt-get install -y \ 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 /opt/usr/share/doc /opt/usr/share/info /opt/usr/share/man \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
ENTRYPOINT ["/usr/bin/tini-static", "-s", "-g", "--"] ENTRYPOINT ["/usr/bin/tini-static", "-s", "-g", "--"]
CMD ["/bin/bash"] CMD ["/bin/bash"]

2
dxvk

@ -1 +1 @@
Subproject commit f8a4ca555a6e5d89f5162a042bbae550902f4e49 Subproject commit ed3aacadb27918e7988e479a275088a78e18cfa8

1
dxvk-nvapi Submodule

@ -0,0 +1 @@
Subproject commit fcd8ce2a0e5eef81148cedcb572fe6d1e667da94

25
make/pefixup.py Executable file
View File

@ -0,0 +1,25 @@
#!/usr/bin/env python3
import sys
import os
import stat
import pefile
for path in sys.argv[1:]:
pe = pefile.PE(path)
for section in pe.sections:
if section.Name.decode("utf-8")[0:5] == ".text":
section.Characteristics &= ~pefile.SECTION_CHARACTERISTICS['IMAGE_SCN_CNT_INITIALIZED_DATA']
section.Characteristics &= ~pefile.SECTION_CHARACTERISTICS['IMAGE_SCN_ALIGN_MASK']
pe.OPTIONAL_HEADER.CheckSum = pe.generate_checksum()
perm = stat.S_IMODE(os.stat(path).st_mode)
if (perm & stat.S_IWUSR) == 0:
os.chmod(path, perm | stat.S_IWUSR)
pe.write(path)
if (perm & stat.S_IWUSR) == 0:
os.chmod(path, perm)

View File

@ -12,7 +12,7 @@ $$(OBJ)/.$(1)-configure$(3): $$($(2)_SRC)/configure.ac
rm -rf "$$($(2)_OBJ$(3))/config.cache" rm -rf "$$($(2)_OBJ$(3))/config.cache"
cd "$$($(2)_OBJ$(3))" && env $$($(2)_ENV$(3)) \ cd "$$($(2)_OBJ$(3))" && env $$($(2)_ENV$(3)) \
$$($(2)_SRC)/configure -C \ $$($(2)_SRC)/configure $(--quiet?) -C \
--prefix="$$($(2)_DST$(3))" \ --prefix="$$($(2)_DST$(3))" \
--libdir="$$($(2)_DST$(3))/lib$(subst 32,,$(3))" \ --libdir="$$($(2)_DST$(3))/lib$(subst 32,,$(3))" \
$$($(2)_ENV$(3)) \ $$($(2)_ENV$(3)) \

View File

@ -55,26 +55,32 @@ ifneq ($(UNSTRIPPED_BUILD),)
$$(OBJ)/.$(1)-dist$(3): $$(OBJ)/.$(1)-dist$(3):
@echo ":: installing $(3)bit $(1)..." >&2 @echo ":: installing $(3)bit $(1)..." >&2
mkdir -p $$($(2)_LIBDIR$(3))/ $$(DST_LIBDIR$(3))/ mkdir -p $$($(2)_LIBDIR$(3))/ $$(DST_LIBDIR$(3))/
cd $$($(2)_LIBDIR$(3)) && find -type f -printf '$$(DST_LIBDIR$(3))/%h\0' | sort -z | uniq -z | xargs --verbose -0 -r -P8 mkdir -p cd $$($(2)_LIBDIR$(3)) && find -type f -printf '$$(DST_LIBDIR$(3))/%h\0' | sort -z | uniq -z | xargs $(--verbose?) -0 -r -P$$(J) mkdir -p
cd $$($(2)_LIBDIR$(3)) && find -type l -printf '%p\0$$(DST_LIBDIR$(3))/%p\0' | xargs --verbose -0 -r -P8 -n2 cp -a cd $$($(2)_LIBDIR$(3)) && find -type l -printf '%p\0$$(DST_LIBDIR$(3))/%p\0' | xargs $(--verbose?) -0 -r -P$$(J) -n2 cp -a
cd $$($(2)_LIBDIR$(3)) && find -type f -not '(' -iname '*.pc' -or -iname '*.cmake' -or -iname '*.a' -or -iname '*.def' ')' \ cd $$($(2)_LIBDIR$(3)) && find -type f -not '(' -iname '*.pc' -or -iname '*.cmake' -or -iname '*.a' -or -iname '*.def' ')' \
-printf '--only-keep-debug\0%p\0$$(DST_LIBDIR$(3))/%p.debug\0' | \ -printf '--only-keep-debug\0%p\0$$(DST_LIBDIR$(3))/%p.debug\0' | \
xargs --verbose -0 -r -P8 -n3 objcopy --file-alignment=4096 xargs $(--verbose?) -0 -r -P$$(J) -n3 objcopy --file-alignment=4096
cd $$($(2)_LIBDIR$(3)) && find -type f -not '(' -iname '*.pc' -or -iname '*.cmake' -or -iname '*.a' -or -iname '*.def' ')' \ cd $$($(2)_LIBDIR$(3)) && find -type f -not '(' -iname '*.pc' -or -iname '*.cmake' -or -iname '*.a' -or -iname '*.def' ')' \
-printf '--add-gnu-debuglink=$$(DST_LIBDIR$(3))/%p.debug\0--strip-debug\0%p\0$$(DST_LIBDIR$(3))/%p\0' | \ -printf '--add-gnu-debuglink=$$(DST_LIBDIR$(3))/%p.debug\0--strip-debug\0%p\0$$(DST_LIBDIR$(3))/%p\0' | \
xargs --verbose -0 -r -P8 -n4 objcopy --file-alignment=4096 xargs $(--verbose?) -0 -r -P$$(J) -n4 objcopy --file-alignment=4096
cd $$($(2)_LIBDIR$(3)) && find -type f -name '*.dll' \
-printf '$$(DST_LIBDIR$(3))/%p\0' | \
xargs $(--verbose?) -0 -r -P$$(J) -n1 $$(SRC)/make/pefixup.py
touch $$@ touch $$@
else else
$$(OBJ)/.$(1)-dist$(3): $$(OBJ)/.$(1)-dist$(3):
@echo ":: installing $(3)bit $(1)..." >&2 @echo ":: installing $(3)bit $(1)..." >&2
mkdir -p $$($(2)_LIBDIR$(3))/ $$(DST_LIBDIR$(3))/ mkdir -p $$($(2)_LIBDIR$(3))/ $$(DST_LIBDIR$(3))/
cd $$($(2)_LIBDIR$(3)) && find -type f -printf '$$(DST_LIBDIR$(3))/%h\0' | sort -z | uniq -z | xargs --verbose -0 -r -P8 mkdir -p cd $$($(2)_LIBDIR$(3)) && find -type f -printf '$$(DST_LIBDIR$(3))/%h\0' | sort -z | uniq -z | xargs $(--verbose?) -0 -r -P$$(J) mkdir -p
cd $$($(2)_LIBDIR$(3)) && find -type l -printf '%p\0$$(DST_LIBDIR$(3))/%p\0' | xargs --verbose -0 -r -P8 -n2 cp -a cd $$($(2)_LIBDIR$(3)) && find -type l -printf '%p\0$$(DST_LIBDIR$(3))/%p\0' | xargs $(--verbose?) -0 -r -P$$(J) -n2 cp -a
cd $$($(2)_LIBDIR$(3)) && find -type f -not '(' -iname '*.pc' -or -iname '*.cmake' -or -iname '*.a' -or -iname '*.def' ')' \ cd $$($(2)_LIBDIR$(3)) && find -type f -not '(' -iname '*.pc' -or -iname '*.cmake' -or -iname '*.a' -or -iname '*.def' ')' \
-printf '$$(DST_LIBDIR$(3))/%p.debug\0' | xargs --verbose -0 -r -P8 rm -f -printf '$$(DST_LIBDIR$(3))/%p.debug\0' | xargs $(--verbose?) -0 -r -P$$(J) rm -f
cd $$($(2)_LIBDIR$(3)) && find -type f -not '(' -iname '*.pc' -or -iname '*.cmake' -or -iname '*.a' -or -iname '*.def' ')' \ cd $$($(2)_LIBDIR$(3)) && find -type f -not '(' -iname '*.pc' -or -iname '*.cmake' -or -iname '*.a' -or -iname '*.def' ')' \
-printf '--strip-debug\0%p\0$$(DST_LIBDIR$(3))/%p\0' | \ -printf '--strip-debug\0%p\0$$(DST_LIBDIR$(3))/%p\0' | \
xargs --verbose -0 -r -P8 -n3 objcopy --file-alignment=4096 xargs $(--verbose?) -0 -r -P$$(J) -n3 objcopy --file-alignment=4096
cd $$($(2)_LIBDIR$(3)) && find -type f -name '*.dll' \
-printf '$$(DST_LIBDIR$(3))/%p\0' | \
xargs $(--verbose?) -0 -r -P$$(J) -n1 $$(SRC)/make/pefixup.py
touch $$@ touch $$@
endif endif
endif endif

View File

@ -31,7 +31,7 @@ $$(OBJ)/.$(1)-configure$(3): $$($(2)_SRC)/meson.build
$$(OBJ)/.$(1)-build$(3): $$(OBJ)/.$(1)-build$(3):
@echo ":: building $(3)bit $(1)..." >&2 @echo ":: building $(3)bit $(1)..." >&2
env $$($(2)_ENV$(3)) \ env $$($(2)_ENV$(3)) \
ninja $$(filter -j%,$$(MAKEFLAGS)) -C "$$($(2)_OBJ$(3))" install ninja $$(filter -j%,$$(MAKEFLAGS)) -C "$$($(2)_OBJ$(3))" install $(-v?)
touch $$@ touch $$@
endif endif
endef endef

View File

@ -25,7 +25,7 @@ $$(OBJ)/.$(1)-source: $$(shell echo -n 'syncing $(1)... ' >&2 && \
rsync --dry-run --filter=:C --exclude '*~' --exclude .git $$($(2)_SOURCE_ARGS) --info=name -Oarx --delete "$$(abspath $(3))/" "$$($(2)_SRC)" | \ rsync --dry-run --filter=:C --exclude '*~' --exclude .git $$($(2)_SOURCE_ARGS) --info=name -Oarx --delete "$$(abspath $(3))/" "$$($(2)_SRC)" | \
grep -v -e ^$$$$ | grep -q ^ && echo $(1)-rebuild && \ grep -v -e ^$$$$ | grep -q ^ && echo $(1)-rebuild && \
echo 'done, dirty' >&2 || echo 'done' >&2) echo 'done, dirty' >&2 || echo 'done' >&2)
rsync --filter=:C --exclude '*~' --exclude .git $$($(2)_SOURCE_ARGS) --info=name -Oarx --delete "$$(abspath $(3))/" "$$($(2)_SRC)" rsync --filter=:C --exclude '*~' --exclude .git $$($(2)_SOURCE_ARGS) --info=name -Oarx --delete "$$(abspath $(3))/" "$$($(2)_SRC)" $(--quiet?)
touch $$@ touch $$@
$$(OBJ)/.$(1)-post-source: $$(OBJ)/.$(1)-source $$(OBJ)/.$(1)-post-source: $$(OBJ)/.$(1)-source

193
proton
View File

@ -15,6 +15,16 @@ import subprocess
import sys import sys
import tarfile 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 ctypes.util import find_library
from filelock import FileLock from filelock import FileLock
#To enable debug logging, copy "user_settings.sample.py" to "user_settings.py" #To enable debug logging, copy "user_settings.sample.py" to "user_settings.py"
@ -127,6 +137,83 @@ def try_get_game_library_dir():
return None 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():
libdl = CDLL(find_library("libdl"))
libglx_nvidia = CDLL("libGLX_nvidia.so.0")
if libdl is None or libglx_nvidia is None:
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_GETFLAGS = 0x80086601
EXT2_IOC_SETFLAGS = 0x40086602 EXT2_IOC_SETFLAGS = 0x40086602
@ -149,14 +236,14 @@ def set_dir_casefold_bit(dir_path):
class Proton: class Proton:
def __init__(self, base_dir): def __init__(self, base_dir):
self.base_dir = base_dir + "/" self.base_dir = base_dir + "/"
self.dist_dir = self.path("dist/") self.dist_dir = self.path("files/")
self.bin_dir = self.path("dist/bin/") self.bin_dir = self.path("files/bin/")
self.lib_dir = self.path("dist/lib/") self.lib_dir = self.path("files/lib/")
self.lib64_dir = self.path("dist/lib64/") self.lib64_dir = self.path("files/lib64/")
self.fonts_dir = self.path("dist/share/fonts/") self.fonts_dir = self.path("files/share/fonts/")
self.wine_fonts_dir = self.path("dist/share/wine/fonts/") self.wine_fonts_dir = self.path("files/share/wine/fonts/")
self.version_file = self.path("version") 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.user_settings_file = self.path("user_settings.py")
self.wine_bin = self.bin_dir + "wine" self.wine_bin = self.bin_dir + "wine"
self.wineserver_bin = self.bin_dir + "wineserver" self.wineserver_bin = self.bin_dir + "wineserver"
@ -165,28 +252,34 @@ class Proton:
def path(self, d): def path(self, d):
return self.base_dir + d return self.base_dir + d
def need_tarball_extraction(self): def cleanup_legacy_dist(self):
'''Checks if the proton_dist tarball archive must be extracted. Returns true if extraction is needed, false otherwise''' old_dist_dir = self.path("dist/")
return not os.path.exists(self.dist_dir) or \ if os.path.exists(old_dist_dir):
not os.path.exists(self.path("dist/version")) or \ with self.dist_lock:
not filecmp.cmp(self.version_file, self.path("dist/version")) if os.path.exists(old_dist_dir):
shutil.rmtree(old_dist_dir)
def extract_tarball(self): def do_steampipe_fixups(self):
with self.dist_lock: fixups_json = self.path("steampipe_fixups.json")
if self.need_tarball_extraction(): fixups_mtime = self.path("files/steampipe_fixups_mtime")
if os.path.exists(self.dist_dir):
shutil.rmtree(self.dist_dir) if os.path.exists(fixups_json):
tar = None with self.dist_lock:
for sf in ["", ".xz", ".bz2", ".gz"]: import steampipe_fixups
if os.path.exists(self.path("proton_dist.tar" + sf)):
tar = tarfile.open(self.path("proton_dist.tar" + sf), mode="r:*") current_fixup_mtime = None
break if os.path.exists(fixups_mtime):
if not tar: with open(fixups_mtime, "r") as f:
log("No proton_dist tarball??") current_fixup_mtime = f.readline().strip()
sys.exit(1)
tar.extractall(path=self.dist_dir) new_fixup_mtime = getmtimestr(fixups_json)
tar.close()
try_copy(self.version_file, self.dist_dir) 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): def missing_default_prefix(self):
'''Check if the default prefix dir is missing. Returns true if missing, false if present''' '''Check if the default prefix dir is missing. Returns true if missing, false if present'''
@ -432,11 +525,18 @@ class CompatData:
if not os.path.exists(self.prefix_dir + "/user.reg"): if not os.path.exists(self.prefix_dir + "/user.reg"):
self.copy_pfx() 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 # collect configuration info
steamdir = os.environ["STEAM_COMPAT_CLIENT_INSTALL_PATH"] steamdir = os.environ["STEAM_COMPAT_CLIENT_INSTALL_PATH"]
use_wined3d = "wined3d" in g_session.compat_config use_wined3d = "wined3d" in g_session.compat_config
use_dxvk_dxgi = "WINEDLLOVERRIDES" in g_session.env and "dxgi=n" in g_session.env["WINEDLLOVERRIDES"] use_dxvk_dxgi = 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", builtin_dll_copy = os.environ.get("PROTON_DLL_COPY",
#dxsetup redist #dxsetup redist
@ -481,6 +581,7 @@ class CompatData:
str(use_wined3d), str(use_wined3d),
str(use_dxvk_dxgi), str(use_dxvk_dxgi),
builtin_dll_copy, builtin_dll_copy,
str(use_nvapi),
)) ))
if old_ver == CURRENT_PREFIX_VERSION: if old_ver == CURRENT_PREFIX_VERSION:
@ -556,7 +657,6 @@ class CompatData:
dxvkfiles = ["dxvk_config", "d3d11", "d3d10", "d3d10core", "d3d10_1", "d3d9"] dxvkfiles = ["dxvk_config", "d3d11", "d3d10", "d3d10core", "d3d10_1", "d3d9"]
wined3dfiles = [] wined3dfiles = []
#if the user asked for dxvk's dxgi (dxgi=n), then copy it into place
if use_dxvk_dxgi: if use_dxvk_dxgi:
dxvkfiles.append("dxgi") dxvkfiles.append("dxgi")
else: else:
@ -575,6 +675,31 @@ class CompatData:
self.prefix_dir + "drive_c/windows/syswow64/" + f + ".dll") self.prefix_dir + "drive_c/windows/syswow64/" + f + ".dll")
g_session.dlloverrides[f] = "n" 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)
try_copy(g_proton.lib64_dir + "wine/vkd3d-proton/d3d12.dll", try_copy(g_proton.lib64_dir + "wine/vkd3d-proton/d3d12.dll",
self.prefix_dir + "drive_c/windows/system32/d3d12.dll") self.prefix_dir + "drive_c/windows/system32/d3d12.dll")
try_copy(g_proton.lib_dir + "wine/vkd3d-proton/d3d12.dll", try_copy(g_proton.lib_dir + "wine/vkd3d-proton/d3d12.dll",
@ -740,6 +865,7 @@ class Session:
self.check_environment("PROTON_SET_GAME_DRIVE", "gamedrive") self.check_environment("PROTON_SET_GAME_DRIVE", "gamedrive")
self.check_environment("PROTON_NO_XIM", "noxim") self.check_environment("PROTON_NO_XIM", "noxim")
self.check_environment("PROTON_HEAP_DELAY_FREE", "heapdelayfree") self.check_environment("PROTON_HEAP_DELAY_FREE", "heapdelayfree")
self.check_environment("PROTON_ENABLE_NVAPI", "enablenvapi")
if "noesync" in self.compat_config: if "noesync" in self.compat_config:
self.env.pop("WINEESYNC", "") self.env.pop("WINEESYNC", "")
@ -779,6 +905,9 @@ class Session:
if "hidenvgpu" in self.compat_config: if "hidenvgpu" in self.compat_config:
self.env["WINE_HIDE_NVIDIA_GPU"] = "1" self.env["WINE_HIDE_NVIDIA_GPU"] = "1"
if "PROTON_CRASH_REPORT_DIR" in self.env:
self.env["WINE_CRASH_REPORT_DIR"] = self.env["PROTON_CRASH_REPORT_DIR"]
if "SteamGameId" in self.env: if "SteamGameId" in self.env:
if self.env["WINEDEBUG"] != "-all": if self.env["WINEDEBUG"] != "-all":
basedir = self.env.get("PROTON_LOG_DIR", os.environ["HOME"]) basedir = self.env.get("PROTON_LOG_DIR", os.environ["HOME"])
@ -967,8 +1096,8 @@ if __name__ == "__main__":
g_proton = Proton(os.path.dirname(sys.argv[0])) g_proton = Proton(os.path.dirname(sys.argv[0]))
if g_proton.need_tarball_extraction(): g_proton.cleanup_legacy_dist()
g_proton.extract_tarball() g_proton.do_steampipe_fixups()
g_compatdata = CompatData(os.environ["STEAM_COMPAT_DATA_PATH"]) 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 3ed3526332f53d7d35cf1b685fa8096b01f26ff0 Subproject commit ec5b4ccecf799e7593dd3c6e8b13dc4f04e77228

2
wine

@ -1 +1 @@
Subproject commit f94b0f7590d43bb3e6aefcc6e16cf69bffc25122 Subproject commit 5b82ac53192d32fe28516abf4161d2174817b164

View File

@ -3,7 +3,7 @@
* This file is generated from OpenXR xr.xml file covered * This file is generated from OpenXR xr.xml file covered
* by the following copyright and permission notice: * by the following copyright and permission notice:
* *
* Copyright (c) 2017-2020 The Khronos Group Inc. * Copyright (c) 2017-2021, The Khronos Group Inc.
* *
* SPDX-License-Identifier: Apache-2.0 OR MIT * SPDX-License-Identifier: Apache-2.0 OR MIT
* *
@ -386,6 +386,12 @@ static XrResult WINAPI wine_xrSetColorSpaceFB(XrSession session, const XrColorSp
return ((wine_XrSession *)session)->wine_instance->funcs.p_xrSetColorSpaceFB(((wine_XrSession *)session)->session, colorspace); return ((wine_XrSession *)session)->wine_instance->funcs.p_xrSetColorSpaceFB(((wine_XrSession *)session)->session, colorspace);
} }
static XrResult WINAPI wine_xrSetEnvironmentDepthEstimationVARJO(XrSession session, XrBool32 enabled)
{
WINE_TRACE("%p, %u\n", session, enabled);
return ((wine_XrSession *)session)->wine_instance->funcs.p_xrSetEnvironmentDepthEstimationVARJO(((wine_XrSession *)session)->session, enabled);
}
static XrResult WINAPI wine_xrSetInputDeviceActiveEXT(XrSession session, XrPath interactionProfile, XrPath topLevelPath, XrBool32 isActive) static XrResult WINAPI wine_xrSetInputDeviceActiveEXT(XrSession session, XrPath interactionProfile, XrPath topLevelPath, XrBool32 isActive)
{ {
WINE_TRACE("%p, 0x%s, 0x%s, %u\n", session, wine_dbgstr_longlong(interactionProfile), wine_dbgstr_longlong(topLevelPath), isActive); WINE_TRACE("%p, 0x%s, 0x%s, %u\n", session, wine_dbgstr_longlong(interactionProfile), wine_dbgstr_longlong(topLevelPath), isActive);
@ -552,6 +558,7 @@ static const struct openxr_func xr_dispatch_table[] =
{"xrRequestExitSession", &wine_xrRequestExitSession}, {"xrRequestExitSession", &wine_xrRequestExitSession},
{"xrResultToString", &wine_xrResultToString}, {"xrResultToString", &wine_xrResultToString},
{"xrSetColorSpaceFB", &wine_xrSetColorSpaceFB}, {"xrSetColorSpaceFB", &wine_xrSetColorSpaceFB},
{"xrSetEnvironmentDepthEstimationVARJO", &wine_xrSetEnvironmentDepthEstimationVARJO},
{"xrSetInputDeviceActiveEXT", &wine_xrSetInputDeviceActiveEXT}, {"xrSetInputDeviceActiveEXT", &wine_xrSetInputDeviceActiveEXT},
{"xrSetInputDeviceLocationEXT", &wine_xrSetInputDeviceLocationEXT}, {"xrSetInputDeviceLocationEXT", &wine_xrSetInputDeviceLocationEXT},
{"xrSetInputDeviceStateBoolEXT", &wine_xrSetInputDeviceStateBoolEXT}, {"xrSetInputDeviceStateBoolEXT", &wine_xrSetInputDeviceStateBoolEXT},
@ -627,6 +634,9 @@ static const char * const xr_extensions[] =
"XR_MSFT_unbounded_reference_space", "XR_MSFT_unbounded_reference_space",
"XR_OCULUS_android_session_state_enable", "XR_OCULUS_android_session_state_enable",
"XR_VALVE_analog_threshold", "XR_VALVE_analog_threshold",
"XR_VARJO_composition_layer_depth_test",
"XR_VARJO_environment_depth_estimation",
"XR_VARJO_foveated_rendering",
"XR_VARJO_quad_views", "XR_VARJO_quad_views",
}; };

View File

@ -3,7 +3,7 @@
* This file is generated from OpenXR xr.xml file covered * This file is generated from OpenXR xr.xml file covered
* by the following copyright and permission notice: * by the following copyright and permission notice:
* *
* Copyright (c) 2017-2020 The Khronos Group Inc. * Copyright (c) 2017-2021, The Khronos Group Inc.
* *
* SPDX-License-Identifier: Apache-2.0 OR MIT * SPDX-License-Identifier: Apache-2.0 OR MIT
* *
@ -134,6 +134,7 @@ struct openxr_instance_funcs
XrResult (*p_xrRequestExitSession)(XrSession); XrResult (*p_xrRequestExitSession)(XrSession);
XrResult (*p_xrResultToString)(XrInstance, XrResult, char[]); XrResult (*p_xrResultToString)(XrInstance, XrResult, char[]);
XrResult (*p_xrSetColorSpaceFB)(XrSession, const XrColorSpaceFB); XrResult (*p_xrSetColorSpaceFB)(XrSession, const XrColorSpaceFB);
XrResult (*p_xrSetEnvironmentDepthEstimationVARJO)(XrSession, XrBool32);
XrResult (*p_xrSetInputDeviceActiveEXT)(XrSession, XrPath, XrPath, XrBool32); XrResult (*p_xrSetInputDeviceActiveEXT)(XrSession, XrPath, XrPath, XrBool32);
XrResult (*p_xrSetInputDeviceLocationEXT)(XrSession, XrPath, XrPath, XrSpace, XrPosef); XrResult (*p_xrSetInputDeviceLocationEXT)(XrSession, XrPath, XrPath, XrSpace, XrPosef);
XrResult (*p_xrSetInputDeviceStateBoolEXT)(XrSession, XrPath, XrPath, XrBool32); XrResult (*p_xrSetInputDeviceStateBoolEXT)(XrSession, XrPath, XrPath, XrBool32);
@ -223,6 +224,7 @@ struct openxr_instance_funcs
USE_XR_FUNC(xrRequestExitSession) \ USE_XR_FUNC(xrRequestExitSession) \
USE_XR_FUNC(xrResultToString) \ USE_XR_FUNC(xrResultToString) \
USE_XR_FUNC(xrSetColorSpaceFB) \ USE_XR_FUNC(xrSetColorSpaceFB) \
USE_XR_FUNC(xrSetEnvironmentDepthEstimationVARJO) \
USE_XR_FUNC(xrSetInputDeviceActiveEXT) \ USE_XR_FUNC(xrSetInputDeviceActiveEXT) \
USE_XR_FUNC(xrSetInputDeviceLocationEXT) \ USE_XR_FUNC(xrSetInputDeviceLocationEXT) \
USE_XR_FUNC(xrSetInputDeviceStateBoolEXT) \ USE_XR_FUNC(xrSetInputDeviceStateBoolEXT) \

View File

@ -3,7 +3,7 @@
* This file is generated from OpenXR xr.xml file covered * This file is generated from OpenXR xr.xml file covered
* by the following copyright and permission notice: * by the following copyright and permission notice:
* *
* Copyright (c) 2017-2020 The Khronos Group Inc. * Copyright (c) 2017-2021, The Khronos Group Inc.
* *
* SPDX-License-Identifier: Apache-2.0 OR MIT * SPDX-License-Identifier: Apache-2.0 OR MIT
* *
@ -65,9 +65,9 @@
#define XR_KHR_COMPOSITION_LAYER_CUBE_EXTENSION_NAME "XR_KHR_composition_layer_cube" #define XR_KHR_COMPOSITION_LAYER_CUBE_EXTENSION_NAME "XR_KHR_composition_layer_cube"
#define XR_KHR_composition_layer_depth_SPEC_VERSION 5 #define XR_KHR_composition_layer_depth_SPEC_VERSION 5
#define XR_KHR_COMPOSITION_LAYER_DEPTH_EXTENSION_NAME "XR_KHR_composition_layer_depth" #define XR_KHR_COMPOSITION_LAYER_DEPTH_EXTENSION_NAME "XR_KHR_composition_layer_depth"
#define XR_KHR_vulkan_swapchain_format_list_SPEC_VERSION 3 #define XR_KHR_vulkan_swapchain_format_list_SPEC_VERSION 4
#define XR_KHR_VULKAN_SWAPCHAIN_FORMAT_LIST_EXTENSION_NAME "XR_KHR_vulkan_swapchain_format_list" #define XR_KHR_VULKAN_SWAPCHAIN_FORMAT_LIST_EXTENSION_NAME "XR_KHR_vulkan_swapchain_format_list"
#define XR_EXT_performance_settings_SPEC_VERSION 1 #define XR_EXT_performance_settings_SPEC_VERSION 2
#define XR_EXT_PERFORMANCE_SETTINGS_EXTENSION_NAME "XR_EXT_performance_settings" #define XR_EXT_PERFORMANCE_SETTINGS_EXTENSION_NAME "XR_EXT_performance_settings"
#define XR_EXT_thermal_query_SPEC_VERSION 1 #define XR_EXT_thermal_query_SPEC_VERSION 1
#define XR_EXT_THERMAL_QUERY_EXTENSION_NAME "XR_EXT_thermal_query" #define XR_EXT_THERMAL_QUERY_EXTENSION_NAME "XR_EXT_thermal_query"
@ -77,7 +77,7 @@
#define XR_KHR_COMPOSITION_LAYER_EQUIRECT_EXTENSION_NAME "XR_KHR_composition_layer_equirect" #define XR_KHR_COMPOSITION_LAYER_EQUIRECT_EXTENSION_NAME "XR_KHR_composition_layer_equirect"
#define XR_KHR_opengl_enable_SPEC_VERSION 9 #define XR_KHR_opengl_enable_SPEC_VERSION 9
#define XR_KHR_OPENGL_ENABLE_EXTENSION_NAME "XR_KHR_opengl_enable" #define XR_KHR_OPENGL_ENABLE_EXTENSION_NAME "XR_KHR_opengl_enable"
#define XR_KHR_vulkan_enable_SPEC_VERSION 7 #define XR_KHR_vulkan_enable_SPEC_VERSION 8
#define XR_KHR_VULKAN_ENABLE_EXTENSION_NAME "XR_KHR_vulkan_enable" #define XR_KHR_VULKAN_ENABLE_EXTENSION_NAME "XR_KHR_vulkan_enable"
#define XR_KHR_D3D11_enable_SPEC_VERSION 5 #define XR_KHR_D3D11_enable_SPEC_VERSION 5
#define XR_KHR_D3D11_ENABLE_EXTENSION_NAME "XR_KHR_D3D11_enable" #define XR_KHR_D3D11_ENABLE_EXTENSION_NAME "XR_KHR_D3D11_enable"
@ -87,7 +87,7 @@
#define XR_EXT_EYE_GAZE_INTERACTION_EXTENSION_NAME "XR_EXT_eye_gaze_interaction" #define XR_EXT_EYE_GAZE_INTERACTION_EXTENSION_NAME "XR_EXT_eye_gaze_interaction"
#define XR_KHR_visibility_mask_SPEC_VERSION 2 #define XR_KHR_visibility_mask_SPEC_VERSION 2
#define XR_KHR_VISIBILITY_MASK_EXTENSION_NAME "XR_KHR_visibility_mask" #define XR_KHR_VISIBILITY_MASK_EXTENSION_NAME "XR_KHR_visibility_mask"
#define XR_EXTX_overlay_SPEC_VERSION 4 #define XR_EXTX_overlay_SPEC_VERSION 5
#define XR_EXTX_OVERLAY_EXTENSION_NAME "XR_EXTX_overlay" #define XR_EXTX_OVERLAY_EXTENSION_NAME "XR_EXTX_overlay"
#define XR_KHR_composition_layer_color_scale_bias_SPEC_VERSION 5 #define XR_KHR_composition_layer_color_scale_bias_SPEC_VERSION 5
#define XR_KHR_COMPOSITION_LAYER_COLOR_SCALE_BIAS_EXTENSION_NAME "XR_KHR_composition_layer_color_scale_bias" #define XR_KHR_COMPOSITION_LAYER_COLOR_SCALE_BIAS_EXTENSION_NAME "XR_KHR_composition_layer_color_scale_bias"
@ -105,15 +105,15 @@
#define XR_OCULUS_ANDROID_SESSION_STATE_ENABLE_EXTENSION_NAME "XR_OCULUS_android_session_state_enable" #define XR_OCULUS_ANDROID_SESSION_STATE_ENABLE_EXTENSION_NAME "XR_OCULUS_android_session_state_enable"
#define XR_EXT_view_configuration_depth_range_SPEC_VERSION 1 #define XR_EXT_view_configuration_depth_range_SPEC_VERSION 1
#define XR_EXT_VIEW_CONFIGURATION_DEPTH_RANGE_EXTENSION_NAME "XR_EXT_view_configuration_depth_range" #define XR_EXT_VIEW_CONFIGURATION_DEPTH_RANGE_EXTENSION_NAME "XR_EXT_view_configuration_depth_range"
#define XR_EXT_conformance_automation_SPEC_VERSION 1 #define XR_EXT_conformance_automation_SPEC_VERSION 2
#define XR_EXT_CONFORMANCE_AUTOMATION_EXTENSION_NAME "XR_EXT_conformance_automation" #define XR_EXT_CONFORMANCE_AUTOMATION_EXTENSION_NAME "XR_EXT_conformance_automation"
#define XR_MSFT_spatial_graph_bridge_SPEC_VERSION 1 #define XR_MSFT_spatial_graph_bridge_SPEC_VERSION 1
#define XR_MSFT_SPATIAL_GRAPH_BRIDGE_EXTENSION_NAME "XR_MSFT_spatial_graph_bridge" #define XR_MSFT_SPATIAL_GRAPH_BRIDGE_EXTENSION_NAME "XR_MSFT_spatial_graph_bridge"
#define XR_MSFT_hand_interaction_SPEC_VERSION 1 #define XR_MSFT_hand_interaction_SPEC_VERSION 1
#define XR_MSFT_HAND_INTERACTION_EXTENSION_NAME "XR_MSFT_hand_interaction" #define XR_MSFT_HAND_INTERACTION_EXTENSION_NAME "XR_MSFT_hand_interaction"
#define XR_EXT_hand_tracking_SPEC_VERSION 2 #define XR_EXT_hand_tracking_SPEC_VERSION 3
#define XR_EXT_HAND_TRACKING_EXTENSION_NAME "XR_EXT_hand_tracking" #define XR_EXT_HAND_TRACKING_EXTENSION_NAME "XR_EXT_hand_tracking"
#define XR_MSFT_hand_tracking_mesh_SPEC_VERSION 2 #define XR_MSFT_hand_tracking_mesh_SPEC_VERSION 3
#define XR_MSFT_HAND_TRACKING_MESH_EXTENSION_NAME "XR_MSFT_hand_tracking_mesh" #define XR_MSFT_HAND_TRACKING_MESH_EXTENSION_NAME "XR_MSFT_hand_tracking_mesh"
#define XR_MSFT_secondary_view_configuration_SPEC_VERSION 1 #define XR_MSFT_secondary_view_configuration_SPEC_VERSION 1
#define XR_MSFT_SECONDARY_VIEW_CONFIGURATION_EXTENSION_NAME "XR_MSFT_secondary_view_configuration" #define XR_MSFT_SECONDARY_VIEW_CONFIGURATION_EXTENSION_NAME "XR_MSFT_secondary_view_configuration"
@ -132,7 +132,7 @@
#define XR_HUAWEI_CONTROLLER_INTERACTION_EXTENSION_NAME "XR_HUAWEI_controller_interaction" #define XR_HUAWEI_CONTROLLER_INTERACTION_EXTENSION_NAME "XR_HUAWEI_controller_interaction"
#define XR_VALVE_analog_threshold_SPEC_VERSION 1 #define XR_VALVE_analog_threshold_SPEC_VERSION 1
#define XR_VALVE_ANALOG_THRESHOLD_EXTENSION_NAME "XR_VALVE_analog_threshold" #define XR_VALVE_ANALOG_THRESHOLD_EXTENSION_NAME "XR_VALVE_analog_threshold"
#define XR_KHR_vulkan_enable2_SPEC_VERSION 1 #define XR_KHR_vulkan_enable2_SPEC_VERSION 2
#define XR_KHR_VULKAN_ENABLE2_EXTENSION_NAME "XR_KHR_vulkan_enable2" #define XR_KHR_VULKAN_ENABLE2_EXTENSION_NAME "XR_KHR_vulkan_enable2"
#define XR_KHR_composition_layer_equirect2_SPEC_VERSION 1 #define XR_KHR_composition_layer_equirect2_SPEC_VERSION 1
#define XR_KHR_COMPOSITION_LAYER_EQUIRECT2_EXTENSION_NAME "XR_KHR_composition_layer_equirect2" #define XR_KHR_COMPOSITION_LAYER_EQUIRECT2_EXTENSION_NAME "XR_KHR_composition_layer_equirect2"
@ -150,6 +150,12 @@
#define XR_FB_COLOR_SPACE_EXTENSION_NAME "XR_FB_color_space" #define XR_FB_COLOR_SPACE_EXTENSION_NAME "XR_FB_color_space"
#define XR_KHR_binding_modification_SPEC_VERSION 1 #define XR_KHR_binding_modification_SPEC_VERSION 1
#define XR_KHR_BINDING_MODIFICATION_EXTENSION_NAME "XR_KHR_binding_modification" #define XR_KHR_BINDING_MODIFICATION_EXTENSION_NAME "XR_KHR_binding_modification"
#define XR_VARJO_foveated_rendering_SPEC_VERSION 1
#define XR_VARJO_FOVEATED_RENDERING_EXTENSION_NAME "XR_VARJO_foveated_rendering"
#define XR_VARJO_composition_layer_depth_test_SPEC_VERSION 1
#define XR_VARJO_COMPOSITION_LAYER_DEPTH_TEST_EXTENSION_NAME "XR_VARJO_composition_layer_depth_test"
#define XR_VARJO_environment_depth_estimation_SPEC_VERSION 1
#define XR_VARJO_ENVIRONMENT_DEPTH_ESTIMATION_EXTENSION_NAME "XR_VARJO_environment_depth_estimation"
#define XR_MAKE_VERSION(major, minor, patch) \ #define XR_MAKE_VERSION(major, minor, patch) \
@ -162,7 +168,7 @@
#define XR_VERSION_PATCH(version) (uint32_t)((uint64_t)(version) & 0xffffffffULL) #define XR_VERSION_PATCH(version) (uint32_t)((uint64_t)(version) & 0xffffffffULL)
#define XR_CURRENT_API_VERSION XR_MAKE_VERSION(1, 0, 13) #define XR_CURRENT_API_VERSION XR_MAKE_VERSION(1, 0, 15)
#if !defined(XR_MAY_ALIAS) #if !defined(XR_MAY_ALIAS)
@ -252,6 +258,7 @@ XR_DEFINE_ATOM(XrSystemId)
typedef int64_t XrTime; typedef int64_t XrTime;
typedef uint64_t XrVersion; typedef uint64_t XrVersion;
typedef XrFlags64 XrAndroidSurfaceSwapchainFlagsFB;
typedef XrFlags64 XrCompositionLayerFlags; typedef XrFlags64 XrCompositionLayerFlags;
typedef XrFlags64 XrDebugUtilsMessageSeverityFlagsEXT; typedef XrFlags64 XrDebugUtilsMessageSeverityFlagsEXT;
typedef XrFlags64 XrDebugUtilsMessageTypeFlagsEXT; typedef XrFlags64 XrDebugUtilsMessageTypeFlagsEXT;
@ -417,6 +424,7 @@ typedef enum XrReferenceSpaceType
XR_REFERENCE_SPACE_TYPE_LOCAL = 2, XR_REFERENCE_SPACE_TYPE_LOCAL = 2,
XR_REFERENCE_SPACE_TYPE_STAGE = 3, XR_REFERENCE_SPACE_TYPE_STAGE = 3,
XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT = 1000038000, XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT = 1000038000,
XR_REFERENCE_SPACE_TYPE_COMBINED_EYE_VARJO = 1000121000,
XR_REFERENCE_SPACE_TYPE_MAX_ENUM = 0x7fffffff, XR_REFERENCE_SPACE_TYPE_MAX_ENUM = 0x7fffffff,
} XrReferenceSpaceType; } XrReferenceSpaceType;
@ -620,6 +628,10 @@ typedef enum XrStructureType
XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB = 1000101000, XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB = 1000101000,
XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB = 1000108000, XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB = 1000108000,
XR_TYPE_BINDING_MODIFICATIONS_KHR = 1000120000, XR_TYPE_BINDING_MODIFICATIONS_KHR = 1000120000,
XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO = 1000121000,
XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO = 1000121001,
XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO = 1000121002,
XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO = 1000122000,
XR_TYPE_GRAPHICS_BINDING_VULKAN2_KHR = XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR, XR_TYPE_GRAPHICS_BINDING_VULKAN2_KHR = XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR,
XR_TYPE_SWAPCHAIN_IMAGE_VULKAN2_KHR = XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR, XR_TYPE_SWAPCHAIN_IMAGE_VULKAN2_KHR = XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR,
XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN2_KHR = XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR, XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN2_KHR = XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR,
@ -652,6 +664,7 @@ typedef struct XrApplicationInfo XrApplicationInfo;
typedef struct XrBaseOutStructure XrBaseOutStructure; typedef struct XrBaseOutStructure XrBaseOutStructure;
typedef struct XrBoundSourcesForActionEnumerateInfo XrBoundSourcesForActionEnumerateInfo; typedef struct XrBoundSourcesForActionEnumerateInfo XrBoundSourcesForActionEnumerateInfo;
typedef struct XrCompositionLayerBaseHeader XrCompositionLayerBaseHeader; typedef struct XrCompositionLayerBaseHeader XrCompositionLayerBaseHeader;
typedef struct XrCompositionLayerDepthTestVARJO XrCompositionLayerDepthTestVARJO;
typedef struct XrControllerModelKeyStateMSFT XrControllerModelKeyStateMSFT; typedef struct XrControllerModelKeyStateMSFT XrControllerModelKeyStateMSFT;
typedef struct XrDebugUtilsLabelEXT XrDebugUtilsLabelEXT; typedef struct XrDebugUtilsLabelEXT XrDebugUtilsLabelEXT;
typedef struct XrEventDataBaseHeader XrEventDataBaseHeader; typedef struct XrEventDataBaseHeader XrEventDataBaseHeader;
@ -661,17 +674,11 @@ typedef struct XrEventDataMainSessionVisibilityChangedEXTX XrEventDataMainSessio
typedef struct XrEventDataSessionStateChanged XrEventDataSessionStateChanged; typedef struct XrEventDataSessionStateChanged XrEventDataSessionStateChanged;
typedef struct XrExtensionProperties XrExtensionProperties; typedef struct XrExtensionProperties XrExtensionProperties;
typedef struct XrExtent2Di XrExtent2Di; typedef struct XrExtent2Di XrExtent2Di;
typedef struct XrFovf XrFovf; typedef struct XrFoveatedViewConfigurationViewVARJO XrFoveatedViewConfigurationViewVARJO;
typedef struct XrFrameEndInfo XrFrameEndInfo; typedef struct XrFrameBeginInfo XrFrameBeginInfo;
typedef struct XrFrameWaitInfo XrFrameWaitInfo; typedef struct XrFrameState XrFrameState;
typedef struct XrGraphicsBindingD3D12KHR XrGraphicsBindingD3D12KHR; typedef struct XrGraphicsBindingD3D11KHR XrGraphicsBindingD3D11KHR;
typedef struct XrGraphicsBindingOpenGLWin32KHR XrGraphicsBindingOpenGLWin32KHR; typedef struct XrGraphicsRequirementsD3D11KHR XrGraphicsRequirementsD3D11KHR;
typedef struct XrGraphicsBindingVulkanKHR XrGraphicsBindingVulkanKHR;
typedef XrGraphicsBindingVulkanKHR XrGraphicsBindingVulkan2KHR;
typedef struct XrGraphicsRequirementsD3D12KHR XrGraphicsRequirementsD3D12KHR;
typedef struct XrGraphicsRequirementsOpenGLKHR XrGraphicsRequirementsOpenGLKHR;
typedef struct XrGraphicsRequirementsVulkanKHR XrGraphicsRequirementsVulkanKHR;
typedef XrGraphicsRequirementsVulkanKHR XrGraphicsRequirementsVulkan2KHR;
typedef struct XrHandJointsLocateInfoEXT XrHandJointsLocateInfoEXT; typedef struct XrHandJointsLocateInfoEXT XrHandJointsLocateInfoEXT;
typedef struct XrHandMeshUpdateInfoMSFT XrHandMeshUpdateInfoMSFT; typedef struct XrHandMeshUpdateInfoMSFT XrHandMeshUpdateInfoMSFT;
typedef struct XrHandPoseTypeInfoMSFT XrHandPoseTypeInfoMSFT; typedef struct XrHandPoseTypeInfoMSFT XrHandPoseTypeInfoMSFT;
@ -691,13 +698,15 @@ typedef struct XrSwapchainImageD3D12KHR XrSwapchainImageD3D12KHR;
typedef struct XrSwapchainImageOpenGLKHR XrSwapchainImageOpenGLKHR; typedef struct XrSwapchainImageOpenGLKHR XrSwapchainImageOpenGLKHR;
typedef struct XrSwapchainImageWaitInfo XrSwapchainImageWaitInfo; typedef struct XrSwapchainImageWaitInfo XrSwapchainImageWaitInfo;
typedef struct XrSystemColorSpacePropertiesFB XrSystemColorSpacePropertiesFB; typedef struct XrSystemColorSpacePropertiesFB XrSystemColorSpacePropertiesFB;
typedef struct XrSystemGetInfo XrSystemGetInfo; typedef struct XrSystemFoveatedRenderingPropertiesVARJO XrSystemFoveatedRenderingPropertiesVARJO;
typedef struct XrSystemHandTrackingMeshPropertiesMSFT XrSystemHandTrackingMeshPropertiesMSFT; typedef struct XrSystemGraphicsProperties XrSystemGraphicsProperties;
typedef struct XrSystemHandTrackingPropertiesEXT XrSystemHandTrackingPropertiesEXT;
typedef struct XrSystemTrackingProperties XrSystemTrackingProperties; typedef struct XrSystemTrackingProperties XrSystemTrackingProperties;
typedef struct XrVector3f XrVector3f; typedef struct XrVector3f XrVector3f;
typedef struct XrViewConfigurationDepthRangeEXT XrViewConfigurationDepthRangeEXT; typedef struct XrViewConfigurationDepthRangeEXT XrViewConfigurationDepthRangeEXT;
typedef struct XrViewConfigurationView XrViewConfigurationView; typedef struct XrViewConfigurationView XrViewConfigurationView;
typedef struct XrViewLocateInfo XrViewLocateInfo; typedef struct XrViewLocateFoveatedRenderingVARJO XrViewLocateFoveatedRenderingVARJO;
typedef struct XrViewState XrViewState;
typedef struct XrVulkanDeviceCreateInfoKHR XrVulkanDeviceCreateInfoKHR; typedef struct XrVulkanDeviceCreateInfoKHR XrVulkanDeviceCreateInfoKHR;
typedef struct XrVulkanInstanceCreateInfoKHR XrVulkanInstanceCreateInfoKHR; typedef struct XrVulkanInstanceCreateInfoKHR XrVulkanInstanceCreateInfoKHR;
typedef struct XrActionSetCreateInfo XrActionSetCreateInfo; typedef struct XrActionSetCreateInfo XrActionSetCreateInfo;
@ -713,8 +722,11 @@ typedef struct XrEventDataEventsLost XrEventDataEventsLost;
typedef struct XrEventDataPerfSettingsEXT XrEventDataPerfSettingsEXT; typedef struct XrEventDataPerfSettingsEXT XrEventDataPerfSettingsEXT;
typedef struct XrEventDataVisibilityMaskChangedKHR XrEventDataVisibilityMaskChangedKHR; typedef struct XrEventDataVisibilityMaskChangedKHR XrEventDataVisibilityMaskChangedKHR;
typedef struct XrEyeGazeSampleTimeEXT XrEyeGazeSampleTimeEXT; typedef struct XrEyeGazeSampleTimeEXT XrEyeGazeSampleTimeEXT;
typedef struct XrFrameState XrFrameState; typedef struct XrFrameEndInfo XrFrameEndInfo;
typedef struct XrGraphicsRequirementsD3D11KHR XrGraphicsRequirementsD3D11KHR; typedef struct XrGraphicsBindingD3D12KHR XrGraphicsBindingD3D12KHR;
typedef struct XrGraphicsBindingVulkanKHR XrGraphicsBindingVulkanKHR;
typedef XrGraphicsBindingVulkanKHR XrGraphicsBindingVulkan2KHR;
typedef struct XrGraphicsRequirementsOpenGLKHR XrGraphicsRequirementsOpenGLKHR;
typedef struct XrHandJointVelocityEXT XrHandJointVelocityEXT; typedef struct XrHandJointVelocityEXT XrHandJointVelocityEXT;
typedef struct XrHandMeshVertexMSFT XrHandMeshVertexMSFT; typedef struct XrHandMeshVertexMSFT XrHandMeshVertexMSFT;
typedef struct XrHapticBaseHeader XrHapticBaseHeader; typedef struct XrHapticBaseHeader XrHapticBaseHeader;
@ -731,12 +743,11 @@ typedef struct XrSwapchainImageAcquireInfo XrSwapchainImageAcquireInfo;
typedef struct XrSwapchainImageVulkanKHR XrSwapchainImageVulkanKHR; typedef struct XrSwapchainImageVulkanKHR XrSwapchainImageVulkanKHR;
typedef XrSwapchainImageVulkanKHR XrSwapchainImageVulkan2KHR; typedef XrSwapchainImageVulkanKHR XrSwapchainImageVulkan2KHR;
typedef struct XrSystemEyeGazeInteractionPropertiesEXT XrSystemEyeGazeInteractionPropertiesEXT; typedef struct XrSystemEyeGazeInteractionPropertiesEXT XrSystemEyeGazeInteractionPropertiesEXT;
typedef struct XrSystemHandTrackingPropertiesEXT XrSystemHandTrackingPropertiesEXT; typedef struct XrSystemHandTrackingMeshPropertiesMSFT XrSystemHandTrackingMeshPropertiesMSFT;
typedef struct XrVector2f XrVector2f; typedef struct XrVector2f XrVector2f;
typedef struct XrView XrView; typedef struct XrViewConfigurationProperties XrViewConfigurationProperties;
typedef struct XrViewConfigurationViewFovEPIC XrViewConfigurationViewFovEPIC; typedef struct XrViewLocateInfo XrViewLocateInfo;
typedef struct XrVisibilityMaskKHR XrVisibilityMaskKHR; typedef struct XrVulkanGraphicsDeviceGetInfoKHR XrVulkanGraphicsDeviceGetInfoKHR;
typedef struct XrVulkanSwapchainFormatListCreateInfoKHR XrVulkanSwapchainFormatListCreateInfoKHR;
typedef struct XrActionSpaceCreateInfo XrActionSpaceCreateInfo; typedef struct XrActionSpaceCreateInfo XrActionSpaceCreateInfo;
typedef struct XrActionStateVector2f XrActionStateVector2f; typedef struct XrActionStateVector2f XrActionStateVector2f;
typedef struct XrBindingModificationBaseHeaderKHR XrBindingModificationBaseHeaderKHR; typedef struct XrBindingModificationBaseHeaderKHR XrBindingModificationBaseHeaderKHR;
@ -745,7 +756,9 @@ typedef struct XrControllerModelNodeStateMSFT XrControllerModelNodeStateMSFT;
typedef struct XrDebugUtilsMessengerCallbackDataEXT XrDebugUtilsMessengerCallbackDataEXT; typedef struct XrDebugUtilsMessengerCallbackDataEXT XrDebugUtilsMessengerCallbackDataEXT;
typedef struct XrEventDataInteractionProfileChanged XrEventDataInteractionProfileChanged; typedef struct XrEventDataInteractionProfileChanged XrEventDataInteractionProfileChanged;
typedef struct XrExtent2Df XrExtent2Df; typedef struct XrExtent2Df XrExtent2Df;
typedef struct XrGraphicsBindingD3D11KHR XrGraphicsBindingD3D11KHR; typedef struct XrFrameWaitInfo XrFrameWaitInfo;
typedef struct XrGraphicsRequirementsD3D12KHR XrGraphicsRequirementsD3D12KHR;
typedef struct XrHandJointLocationEXT XrHandJointLocationEXT;
typedef struct XrHandJointVelocitiesEXT XrHandJointVelocitiesEXT; typedef struct XrHandJointVelocitiesEXT XrHandJointVelocitiesEXT;
typedef struct XrHandMeshSpaceCreateInfoMSFT XrHandMeshSpaceCreateInfoMSFT; typedef struct XrHandMeshSpaceCreateInfoMSFT XrHandMeshSpaceCreateInfoMSFT;
typedef struct XrHandTrackerCreateInfoEXT XrHandTrackerCreateInfoEXT; typedef struct XrHandTrackerCreateInfoEXT XrHandTrackerCreateInfoEXT;
@ -756,39 +769,42 @@ typedef struct XrSecondaryViewConfigurationSessionBeginInfoMSFT XrSecondaryViewC
typedef struct XrSpaceLocation XrSpaceLocation; typedef struct XrSpaceLocation XrSpaceLocation;
typedef struct XrSpatialGraphNodeSpaceCreateInfoMSFT XrSpatialGraphNodeSpaceCreateInfoMSFT; typedef struct XrSpatialGraphNodeSpaceCreateInfoMSFT XrSpatialGraphNodeSpaceCreateInfoMSFT;
typedef struct XrSwapchainImageReleaseInfo XrSwapchainImageReleaseInfo; typedef struct XrSwapchainImageReleaseInfo XrSwapchainImageReleaseInfo;
typedef struct XrSystemGraphicsProperties XrSystemGraphicsProperties; typedef struct XrSystemGetInfo XrSystemGetInfo;
typedef struct XrVector4f XrVector4f; typedef struct XrVector4f XrVector4f;
typedef struct XrViewState XrViewState; typedef struct XrVisibilityMaskKHR XrVisibilityMaskKHR;
typedef struct XrActionStatePose XrActionStatePose; typedef struct XrActionStatePose XrActionStatePose;
typedef struct XrBindingModificationsKHR XrBindingModificationsKHR; typedef struct XrBindingModificationsKHR XrBindingModificationsKHR;
typedef struct XrControllerModelStateMSFT XrControllerModelStateMSFT; typedef struct XrControllerModelStateMSFT XrControllerModelStateMSFT;
typedef struct XrEventDataReferenceSpaceChangePending XrEventDataReferenceSpaceChangePending; typedef struct XrEventDataReferenceSpaceChangePending XrEventDataReferenceSpaceChangePending;
typedef struct XrHandMeshIndexBufferMSFT XrHandMeshIndexBufferMSFT; typedef struct XrGraphicsBindingOpenGLWin32KHR XrGraphicsBindingOpenGLWin32KHR;
typedef struct XrHandJointLocationsEXT XrHandJointLocationsEXT;
typedef struct XrHandMeshVertexBufferMSFT XrHandMeshVertexBufferMSFT; typedef struct XrHandMeshVertexBufferMSFT XrHandMeshVertexBufferMSFT;
typedef struct XrInteractionProfileSuggestedBinding XrInteractionProfileSuggestedBinding; typedef struct XrInteractionProfileSuggestedBinding XrInteractionProfileSuggestedBinding;
typedef struct XrSecondaryViewConfigurationFrameEndInfoMSFT XrSecondaryViewConfigurationFrameEndInfoMSFT; typedef struct XrSecondaryViewConfigurationFrameEndInfoMSFT XrSecondaryViewConfigurationFrameEndInfoMSFT;
typedef struct XrSpatialAnchorCreateInfoMSFT XrSpatialAnchorCreateInfoMSFT; typedef struct XrSpatialAnchorCreateInfoMSFT XrSpatialAnchorCreateInfoMSFT;
typedef struct XrSwapchainSubImage XrSwapchainSubImage; typedef struct XrSwapchainSubImage XrSwapchainSubImage;
typedef struct XrViewConfigurationProperties XrViewConfigurationProperties; typedef struct XrVulkanSwapchainFormatListCreateInfoKHR XrVulkanSwapchainFormatListCreateInfoKHR;
typedef struct XrApiLayerProperties XrApiLayerProperties; typedef struct XrApiLayerProperties XrApiLayerProperties;
typedef struct XrCompositionLayerDepthInfoKHR XrCompositionLayerDepthInfoKHR; typedef struct XrCompositionLayerDepthInfoKHR XrCompositionLayerDepthInfoKHR;
typedef struct XrCompositionLayerEquirectKHR XrCompositionLayerEquirectKHR; typedef struct XrCompositionLayerEquirectKHR XrCompositionLayerEquirectKHR;
typedef struct XrCompositionLayerProjectionView XrCompositionLayerProjectionView;
typedef struct XrEventDataBuffer XrEventDataBuffer;
typedef struct XrHandJointLocationEXT XrHandJointLocationEXT;
typedef struct XrHandMeshMSFT XrHandMeshMSFT;
typedef struct XrRect2Df XrRect2Df;
typedef struct XrSwapchainImageD3D11KHR XrSwapchainImageD3D11KHR;
typedef struct XrVulkanGraphicsDeviceGetInfoKHR XrVulkanGraphicsDeviceGetInfoKHR;
typedef struct XrCompositionLayerCylinderKHR XrCompositionLayerCylinderKHR;
typedef struct XrCompositionLayerProjection XrCompositionLayerProjection;
typedef struct XrFrameBeginInfo XrFrameBeginInfo;
typedef struct XrHolographicWindowAttachmentMSFT XrHolographicWindowAttachmentMSFT;
typedef struct XrSystemProperties XrSystemProperties;
typedef struct XrCompositionLayerEquirect2KHR XrCompositionLayerEquirect2KHR;
typedef struct XrHandJointLocationsEXT XrHandJointLocationsEXT;
typedef struct XrCompositionLayerQuad XrCompositionLayerQuad; typedef struct XrCompositionLayerQuad XrCompositionLayerQuad;
typedef struct XrFovf XrFovf;
typedef struct XrHandMeshIndexBufferMSFT XrHandMeshIndexBufferMSFT;
typedef struct XrHolographicWindowAttachmentMSFT XrHolographicWindowAttachmentMSFT;
typedef struct XrSessionBeginInfo XrSessionBeginInfo; typedef struct XrSessionBeginInfo XrSessionBeginInfo;
typedef struct XrSystemProperties XrSystemProperties;
typedef struct XrViewConfigurationViewFovEPIC XrViewConfigurationViewFovEPIC;
typedef struct XrCompositionLayerCylinderKHR XrCompositionLayerCylinderKHR;
typedef struct XrCompositionLayerProjectionView XrCompositionLayerProjectionView;
typedef struct XrGraphicsRequirementsVulkanKHR XrGraphicsRequirementsVulkanKHR;
typedef XrGraphicsRequirementsVulkanKHR XrGraphicsRequirementsVulkan2KHR;
typedef struct XrRect2Df XrRect2Df;
typedef struct XrView XrView;
typedef struct XrCompositionLayerEquirect2KHR XrCompositionLayerEquirect2KHR;
typedef struct XrEventDataBuffer XrEventDataBuffer;
typedef struct XrSwapchainImageD3D11KHR XrSwapchainImageD3D11KHR;
typedef struct XrCompositionLayerProjection XrCompositionLayerProjection;
typedef struct XrHandMeshMSFT XrHandMeshMSFT;
typedef XrBool32 (XRAPI_PTR * PFN_xrDebugUtilsMessengerCallbackEXT)( typedef XrBool32 (XRAPI_PTR * PFN_xrDebugUtilsMessengerCallbackEXT)(
XrDebugUtilsMessageSeverityFlagsEXT messageSeverity, XrDebugUtilsMessageSeverityFlagsEXT messageSeverity,
XrDebugUtilsMessageTypeFlagsEXT messageTypes, XrDebugUtilsMessageTypeFlagsEXT messageTypes,
@ -868,6 +884,14 @@ struct XrCompositionLayerBaseHeader
XrSpace space; XrSpace space;
}; };
struct XrCompositionLayerDepthTestVARJO
{
XrStructureType type;
const void *next;
float depthTestRangeNearZ;
float depthTestRangeFarZ;
};
struct XrControllerModelKeyStateMSFT struct XrControllerModelKeyStateMSFT
{ {
XrStructureType type; XrStructureType type;
@ -934,58 +958,36 @@ struct XrExtent2Di
int32_t height; int32_t height;
}; };
struct XrFovf struct XrFoveatedViewConfigurationViewVARJO
{
float angleLeft;
float angleRight;
float angleUp;
float angleDown;
};
struct XrFrameEndInfo
{ {
XrStructureType type; XrStructureType type;
const void *next; void *next;
XrTime displayTime; XrBool32 foveatedRenderingActive;
XrEnvironmentBlendMode environmentBlendMode;
uint32_t layerCount;
const XrCompositionLayerBaseHeader * const*layers;
}; };
struct XrFrameWaitInfo struct XrFrameBeginInfo
{ {
XrStructureType type; XrStructureType type;
const void *next; const void *next;
}; };
struct XrGraphicsBindingD3D12KHR struct XrFrameState
{
XrStructureType type;
void *next;
XrTime predictedDisplayTime;
XrDuration predictedDisplayPeriod;
XrBool32 shouldRender;
};
struct XrGraphicsBindingD3D11KHR
{ {
XrStructureType type; XrStructureType type;
const void *next; const void *next;
ID3D12Device *device; ID3D11Device *device;
ID3D12CommandQueue *queue;
}; };
struct XrGraphicsBindingOpenGLWin32KHR struct XrGraphicsRequirementsD3D11KHR
{
XrStructureType type;
const void *next;
HDC hDC;
HGLRC hGLRC;
};
struct XrGraphicsBindingVulkanKHR
{
XrStructureType type;
const void *next;
VkInstance instance;
VkPhysicalDevice physicalDevice;
VkDevice device;
uint32_t queueFamilyIndex;
uint32_t queueIndex;
};
struct XrGraphicsRequirementsD3D12KHR
{ {
XrStructureType type; XrStructureType type;
void *next; void *next;
@ -993,22 +995,6 @@ struct XrGraphicsRequirementsD3D12KHR
D3D_FEATURE_LEVEL minFeatureLevel; D3D_FEATURE_LEVEL minFeatureLevel;
}; };
struct XrGraphicsRequirementsOpenGLKHR
{
XrStructureType type;
void *next;
XrVersion minApiVersionSupported;
XrVersion maxApiVersionSupported;
};
struct XrGraphicsRequirementsVulkanKHR
{
XrStructureType type;
void *next;
XrVersion minApiVersionSupported;
XrVersion maxApiVersionSupported;
};
struct XrHandJointsLocateInfoEXT struct XrHandJointsLocateInfoEXT
{ {
XrStructureType type; XrStructureType type;
@ -1161,20 +1147,25 @@ struct XrSystemColorSpacePropertiesFB
XrColorSpaceFB colorSpace; XrColorSpaceFB colorSpace;
}; };
struct XrSystemGetInfo struct XrSystemFoveatedRenderingPropertiesVARJO
{
XrStructureType type;
const void *next;
XrFormFactor formFactor;
};
struct XrSystemHandTrackingMeshPropertiesMSFT
{ {
XrStructureType type; XrStructureType type;
void *next; void *next;
XrBool32 supportsHandTrackingMesh; XrBool32 supportsFoveatedRendering;
uint32_t maxHandMeshIndexCount; };
uint32_t maxHandMeshVertexCount;
struct XrSystemGraphicsProperties
{
uint32_t maxSwapchainImageHeight;
uint32_t maxSwapchainImageWidth;
uint32_t maxLayerCount;
};
struct XrSystemHandTrackingPropertiesEXT
{
XrStructureType type;
void *next;
XrBool32 supportsHandTracking;
}; };
struct XrSystemTrackingProperties struct XrSystemTrackingProperties
@ -1212,13 +1203,18 @@ struct XrViewConfigurationView
uint32_t maxSwapchainSampleCount; uint32_t maxSwapchainSampleCount;
}; };
struct XrViewLocateInfo struct XrViewLocateFoveatedRenderingVARJO
{ {
XrStructureType type; XrStructureType type;
const void *next; const void *next;
XrViewConfigurationType viewConfigurationType; XrBool32 foveatedRenderingActive;
XrTime displayTime; };
XrSpace space;
struct XrViewState
{
XrStructureType type;
void *next;
XrViewStateFlags viewStateFlags;
}; };
struct XrVulkanDeviceCreateInfoKHR struct XrVulkanDeviceCreateInfoKHR
@ -1356,21 +1352,41 @@ struct XrEyeGazeSampleTimeEXT
XrTime time; XrTime time;
}; };
struct XrFrameState struct XrFrameEndInfo
{ {
XrStructureType type; XrStructureType type;
void *next; const void *next;
XrTime predictedDisplayTime; XrTime displayTime;
XrDuration predictedDisplayPeriod; XrEnvironmentBlendMode environmentBlendMode;
XrBool32 shouldRender; uint32_t layerCount;
const XrCompositionLayerBaseHeader * const*layers;
}; };
struct XrGraphicsRequirementsD3D11KHR struct XrGraphicsBindingD3D12KHR
{
XrStructureType type;
const void *next;
ID3D12Device *device;
ID3D12CommandQueue *queue;
};
struct XrGraphicsBindingVulkanKHR
{
XrStructureType type;
const void *next;
VkInstance instance;
VkPhysicalDevice physicalDevice;
VkDevice device;
uint32_t queueFamilyIndex;
uint32_t queueIndex;
};
struct XrGraphicsRequirementsOpenGLKHR
{ {
XrStructureType type; XrStructureType type;
void *next; void *next;
LUID adapterLuid; XrVersion minApiVersionSupported;
D3D_FEATURE_LEVEL minFeatureLevel; XrVersion maxApiVersionSupported;
}; };
struct XrHandJointVelocityEXT struct XrHandJointVelocityEXT
@ -1490,11 +1506,13 @@ struct XrSystemEyeGazeInteractionPropertiesEXT
XrBool32 supportsEyeGazeInteraction; XrBool32 supportsEyeGazeInteraction;
}; };
struct XrSystemHandTrackingPropertiesEXT struct XrSystemHandTrackingMeshPropertiesMSFT
{ {
XrStructureType type; XrStructureType type;
void *next; void *next;
XrBool32 supportsHandTracking; XrBool32 supportsHandTrackingMesh;
uint32_t maxHandMeshIndexCount;
uint32_t maxHandMeshVertexCount;
}; };
struct XrVector2f struct XrVector2f
@ -1503,40 +1521,29 @@ struct XrVector2f
float y; float y;
}; };
struct XrView struct XrViewConfigurationProperties
{ {
XrStructureType type; XrStructureType type;
void *next; void *next;
XrPosef pose; XrViewConfigurationType viewConfigurationType;
XrFovf fov; XrBool32 fovMutable;
}; };
struct XrViewConfigurationViewFovEPIC struct XrViewLocateInfo
{ {
XrStructureType type; XrStructureType type;
const void *next; const void *next;
XrFovf recommendedFov; XrViewConfigurationType viewConfigurationType;
XrFovf maxMutableFov; XrTime displayTime;
XrSpace space;
}; };
struct XrVisibilityMaskKHR struct XrVulkanGraphicsDeviceGetInfoKHR
{
XrStructureType type;
void *next;
uint32_t vertexCapacityInput;
uint32_t vertexCountOutput;
XrVector2f *vertices;
uint32_t indexCapacityInput;
uint32_t indexCountOutput;
uint32_t *indices;
};
struct XrVulkanSwapchainFormatListCreateInfoKHR
{ {
XrStructureType type; XrStructureType type;
const void *next; const void *next;
uint32_t viewFormatCount; XrSystemId systemId;
const VkFormat *viewFormats; VkInstance vulkanInstance;
}; };
struct XrActionSpaceCreateInfo struct XrActionSpaceCreateInfo
@ -1605,11 +1612,25 @@ struct XrExtent2Df
float height; float height;
}; };
struct XrGraphicsBindingD3D11KHR struct XrFrameWaitInfo
{ {
XrStructureType type; XrStructureType type;
const void *next; const void *next;
ID3D11Device *device; };
struct XrGraphicsRequirementsD3D12KHR
{
XrStructureType type;
void *next;
LUID adapterLuid;
D3D_FEATURE_LEVEL minFeatureLevel;
};
struct XrHandJointLocationEXT
{
XrSpaceLocationFlags locationFlags;
XrPosef pose;
float radius;
}; };
struct XrHandJointVelocitiesEXT struct XrHandJointVelocitiesEXT
@ -1687,11 +1708,11 @@ struct XrSwapchainImageReleaseInfo
const void *next; const void *next;
}; };
struct XrSystemGraphicsProperties struct XrSystemGetInfo
{ {
uint32_t maxSwapchainImageHeight; XrStructureType type;
uint32_t maxSwapchainImageWidth; const void *next;
uint32_t maxLayerCount; XrFormFactor formFactor;
}; };
struct XrVector4f struct XrVector4f
@ -1702,11 +1723,16 @@ struct XrVector4f
float w; float w;
}; };
struct XrViewState struct XrVisibilityMaskKHR
{ {
XrStructureType type; XrStructureType type;
void *next; void *next;
XrViewStateFlags viewStateFlags; uint32_t vertexCapacityInput;
uint32_t vertexCountOutput;
XrVector2f *vertices;
uint32_t indexCapacityInput;
uint32_t indexCountOutput;
uint32_t *indices;
}; };
struct XrActionStatePose struct XrActionStatePose
@ -1744,12 +1770,21 @@ struct XrEventDataReferenceSpaceChangePending
XrPosef poseInPreviousSpace; XrPosef poseInPreviousSpace;
}; };
struct XrHandMeshIndexBufferMSFT struct XrGraphicsBindingOpenGLWin32KHR
{ {
uint32_t indexBufferKey; XrStructureType type;
uint32_t indexCapacityInput; const void *next;
uint32_t indexCountOutput; HDC hDC;
uint32_t *indices; HGLRC hGLRC;
};
struct XrHandJointLocationsEXT
{
XrStructureType type;
void *next;
XrBool32 isActive;
uint32_t jointCount;
XrHandJointLocationEXT *jointLocations;
}; };
struct XrHandMeshVertexBufferMSFT struct XrHandMeshVertexBufferMSFT
@ -1793,12 +1828,12 @@ struct XrSwapchainSubImage
uint32_t imageArrayIndex; uint32_t imageArrayIndex;
}; };
struct XrViewConfigurationProperties struct XrVulkanSwapchainFormatListCreateInfoKHR
{ {
XrStructureType type; XrStructureType type;
void *next; const void *next;
XrViewConfigurationType viewConfigurationType; uint32_t viewFormatCount;
XrBool32 fovMutable; const VkFormat *viewFormats;
}; };
struct XrApiLayerProperties struct XrApiLayerProperties
@ -1836,59 +1871,66 @@ struct XrCompositionLayerEquirectKHR
XrVector2f bias; XrVector2f bias;
}; };
struct XrCompositionLayerProjectionView struct XrCompositionLayerQuad
{ {
XrStructureType type; XrStructureType type;
const void *next; const void *next;
XrPosef pose; XrCompositionLayerFlags layerFlags;
XrFovf fov; XrSpace space;
XrEyeVisibility eyeVisibility;
XrSwapchainSubImage subImage; XrSwapchainSubImage subImage;
};
struct XrEventDataBuffer
{
XrStructureType type;
const void *next;
uint8_t varying[4000];
};
struct XrHandJointLocationEXT
{
XrSpaceLocationFlags locationFlags;
XrPosef pose; XrPosef pose;
float radius; XrExtent2Df size;
}; };
struct XrHandMeshMSFT struct XrFovf
{ {
XrStructureType type; float angleLeft;
void *next; float angleRight;
XrBool32 isActive; float angleUp;
XrBool32 indexBufferChanged; float angleDown;
XrBool32 vertexBufferChanged;
XrHandMeshIndexBufferMSFT indexBuffer;
XrHandMeshVertexBufferMSFT vertexBuffer;
}; };
struct XrRect2Df struct XrHandMeshIndexBufferMSFT
{ {
XrOffset2Df offset; uint32_t indexBufferKey;
XrExtent2Df extent; uint32_t indexCapacityInput;
uint32_t indexCountOutput;
uint32_t *indices;
}; };
struct XrSwapchainImageD3D11KHR struct XrHolographicWindowAttachmentMSFT
{
XrStructureType type;
void *next;
ID3D11Texture2D *texture;
};
struct XrVulkanGraphicsDeviceGetInfoKHR
{ {
XrStructureType type; XrStructureType type;
const void *next; const void *next;
IUnknown *holographicSpace;
IUnknown *coreWindow;
};
struct XrSessionBeginInfo
{
XrStructureType type;
const void *next;
XrViewConfigurationType primaryViewConfigurationType;
};
struct XrSystemProperties
{
XrStructureType type;
void *next;
XrSystemId systemId; XrSystemId systemId;
VkInstance vulkanInstance; uint32_t vendorId;
char systemName[XR_MAX_SYSTEM_NAME_SIZE];
XrSystemGraphicsProperties graphicsProperties;
XrSystemTrackingProperties trackingProperties;
};
struct XrViewConfigurationViewFovEPIC
{
XrStructureType type;
const void *next;
XrFovf recommendedFov;
XrFovf maxMutableFov;
}; };
struct XrCompositionLayerCylinderKHR struct XrCompositionLayerCylinderKHR
@ -1905,39 +1947,35 @@ struct XrCompositionLayerCylinderKHR
float aspectRatio; float aspectRatio;
}; };
struct XrCompositionLayerProjection struct XrCompositionLayerProjectionView
{ {
XrStructureType type; XrStructureType type;
const void *next; const void *next;
XrCompositionLayerFlags layerFlags; XrPosef pose;
XrSpace space; XrFovf fov;
uint32_t viewCount; XrSwapchainSubImage subImage;
const XrCompositionLayerProjectionView *views;
}; };
struct XrFrameBeginInfo struct XrGraphicsRequirementsVulkanKHR
{
XrStructureType type;
const void *next;
};
struct XrHolographicWindowAttachmentMSFT
{
XrStructureType type;
const void *next;
IUnknown *holographicSpace;
IUnknown *coreWindow;
};
struct XrSystemProperties
{ {
XrStructureType type; XrStructureType type;
void *next; void *next;
XrSystemId systemId; XrVersion minApiVersionSupported;
uint32_t vendorId; XrVersion maxApiVersionSupported;
char systemName[XR_MAX_SYSTEM_NAME_SIZE]; };
XrSystemGraphicsProperties graphicsProperties;
XrSystemTrackingProperties trackingProperties; struct XrRect2Df
{
XrOffset2Df offset;
XrExtent2Df extent;
};
struct XrView
{
XrStructureType type;
void *next;
XrPosef pose;
XrFovf fov;
}; };
struct XrCompositionLayerEquirect2KHR struct XrCompositionLayerEquirect2KHR
@ -1955,32 +1993,39 @@ struct XrCompositionLayerEquirect2KHR
float lowerVerticalAngle; float lowerVerticalAngle;
}; };
struct XrHandJointLocationsEXT struct XrEventDataBuffer
{
XrStructureType type;
const void *next;
uint8_t varying[4000];
};
struct XrSwapchainImageD3D11KHR
{ {
XrStructureType type; XrStructureType type;
void *next; void *next;
XrBool32 isActive; ID3D11Texture2D *texture;
uint32_t jointCount;
XrHandJointLocationEXT *jointLocations;
}; };
struct XrCompositionLayerQuad struct XrCompositionLayerProjection
{ {
XrStructureType type; XrStructureType type;
const void *next; const void *next;
XrCompositionLayerFlags layerFlags; XrCompositionLayerFlags layerFlags;
XrSpace space; XrSpace space;
XrEyeVisibility eyeVisibility; uint32_t viewCount;
XrSwapchainSubImage subImage; const XrCompositionLayerProjectionView *views;
XrPosef pose;
XrExtent2Df size;
}; };
struct XrSessionBeginInfo struct XrHandMeshMSFT
{ {
XrStructureType type; XrStructureType type;
const void *next; void *next;
XrViewConfigurationType primaryViewConfigurationType; XrBool32 isActive;
XrBool32 indexBufferChanged;
XrBool32 vertexBufferChanged;
XrHandMeshIndexBufferMSFT indexBuffer;
XrHandMeshVertexBufferMSFT vertexBuffer;
}; };
typedef XrResult (XRAPI_PTR *PFN_xrAcquireSwapchainImage)(XrSwapchain, const XrSwapchainImageAcquireInfo *, uint32_t *); typedef XrResult (XRAPI_PTR *PFN_xrAcquireSwapchainImage)(XrSwapchain, const XrSwapchainImageAcquireInfo *, uint32_t *);
@ -2063,6 +2108,7 @@ typedef XrResult (XRAPI_PTR *PFN_xrRequestDisplayRefreshRateFB)(XrSession, float
typedef XrResult (XRAPI_PTR *PFN_xrRequestExitSession)(XrSession); typedef XrResult (XRAPI_PTR *PFN_xrRequestExitSession)(XrSession);
typedef XrResult (XRAPI_PTR *PFN_xrResultToString)(XrInstance, XrResult, char[]); typedef XrResult (XRAPI_PTR *PFN_xrResultToString)(XrInstance, XrResult, char[]);
typedef XrResult (XRAPI_PTR *PFN_xrSetColorSpaceFB)(XrSession, const XrColorSpaceFB); typedef XrResult (XRAPI_PTR *PFN_xrSetColorSpaceFB)(XrSession, const XrColorSpaceFB);
typedef XrResult (XRAPI_PTR *PFN_xrSetEnvironmentDepthEstimationVARJO)(XrSession, XrBool32);
typedef XrResult (XRAPI_PTR *PFN_xrSetInputDeviceActiveEXT)(XrSession, XrPath, XrPath, XrBool32); typedef XrResult (XRAPI_PTR *PFN_xrSetInputDeviceActiveEXT)(XrSession, XrPath, XrPath, XrBool32);
typedef XrResult (XRAPI_PTR *PFN_xrSetInputDeviceLocationEXT)(XrSession, XrPath, XrPath, XrSpace, XrPosef); typedef XrResult (XRAPI_PTR *PFN_xrSetInputDeviceLocationEXT)(XrSession, XrPath, XrPath, XrSpace, XrPosef);
typedef XrResult (XRAPI_PTR *PFN_xrSetInputDeviceStateBoolEXT)(XrSession, XrPath, XrPath, XrBool32); typedef XrResult (XRAPI_PTR *PFN_xrSetInputDeviceStateBoolEXT)(XrSession, XrPath, XrPath, XrBool32);
@ -2159,6 +2205,7 @@ XrResult XRAPI_CALL xrRequestDisplayRefreshRateFB(XrSession session, float displ
XrResult XRAPI_CALL xrRequestExitSession(XrSession session); XrResult XRAPI_CALL xrRequestExitSession(XrSession session);
XrResult XRAPI_CALL xrResultToString(XrInstance instance, XrResult value, char buffer[]); XrResult XRAPI_CALL xrResultToString(XrInstance instance, XrResult value, char buffer[]);
XrResult XRAPI_CALL xrSetColorSpaceFB(XrSession session, const XrColorSpaceFB colorspace); XrResult XRAPI_CALL xrSetColorSpaceFB(XrSession session, const XrColorSpaceFB colorspace);
XrResult XRAPI_CALL xrSetEnvironmentDepthEstimationVARJO(XrSession session, XrBool32 enabled);
XrResult XRAPI_CALL xrSetInputDeviceActiveEXT(XrSession session, XrPath interactionProfile, XrPath topLevelPath, XrBool32 isActive); XrResult XRAPI_CALL xrSetInputDeviceActiveEXT(XrSession session, XrPath interactionProfile, XrPath topLevelPath, XrBool32 isActive);
XrResult XRAPI_CALL xrSetInputDeviceLocationEXT(XrSession session, XrPath topLevelPath, XrPath inputSourcePath, XrSpace space, XrPosef pose); XrResult XRAPI_CALL xrSetInputDeviceLocationEXT(XrSession session, XrPath topLevelPath, XrPath inputSourcePath, XrSpace space, XrPosef pose);
XrResult XRAPI_CALL xrSetInputDeviceStateBoolEXT(XrSession session, XrPath topLevelPath, XrPath inputSourcePath, XrBool32 state); XrResult XRAPI_CALL xrSetInputDeviceStateBoolEXT(XrSession session, XrPath topLevelPath, XrPath inputSourcePath, XrBool32 state);

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<registry> <registry>
<comment> <comment>
Copyright (c) 2017-2020 The Khronos Group Inc. Copyright (c) 2017-2021, The Khronos Group Inc.
SPDX-License-Identifier: Apache-2.0 OR MIT SPDX-License-Identifier: Apache-2.0 OR MIT
@ -37,7 +37,7 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
<tag name="KHR" author="Khronos" contact="Brent Insko @insko"/> <tag name="KHR" author="Khronos" contact="Brent Insko @insko"/>
<tag name="LUNARG" author="LunarG" contact="Brad Grantham @bradgrantham-lunarg"/> <tag name="LUNARG" author="LunarG" contact="Brad Grantham @bradgrantham-lunarg"/>
<tag name="LIV" author="LIV" contact="Arthur Brainville @Ybalrid, Steffan Donal @liv_ruu"/> <tag name="LIV" author="LIV" contact="Arthur Brainville @Ybalrid, Steffan Donal @liv_ruu"/>
<tag name="MAGICLEAP" author="Magic Leap" contact="Blake Taylor @theblindprogramm3r"/> <tag name="ML" author="Magic Leap" contact="Jey Michaelraj @jeymichael"/>
<tag name="MND" author="Monado Project" contact="Jakob Bornecrantz @wallbraker, Ryan Pavlik @rpavlik"/> <tag name="MND" author="Monado Project" contact="Jakob Bornecrantz @wallbraker, Ryan Pavlik @rpavlik"/>
<tag name="MNDX" author="Monado Project experimental" contact="Jakob Bornecrantz @wallbraker, Ryan Pavlik @rpavlik"/> <tag name="MNDX" author="Monado Project experimental" contact="Jakob Bornecrantz @wallbraker, Ryan Pavlik @rpavlik"/>
<tag name="MSFT" author="Microsoft" contact="Alex Turner @alexturn, Yin Li @yl_msft, Bryce Hutchings @brycehutchings, Lachlan Ford @laford_msft, Minmin Gong @gongminmin "/> <tag name="MSFT" author="Microsoft" contact="Alex Turner @alexturn, Yin Li @yl_msft, Bryce Hutchings @brycehutchings, Lachlan Ford @laford_msft, Minmin Gong @gongminmin "/>
@ -111,7 +111,7 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
updates them automatically by processing a line at a time. updates them automatically by processing a line at a time.
--> -->
<type category="define">// OpenXR current version number. <type category="define">// OpenXR current version number.
#define <name>XR_CURRENT_API_VERSION</name> <type>XR_MAKE_VERSION</type>(1, 0, 13)</type> #define <name>XR_CURRENT_API_VERSION</name> <type>XR_MAKE_VERSION</type>(1, 0, 15)</type>
<!-- <!--
NOTE: For avoidance of ambiguity, there should only be 1 <name> tag immediately in NOTE: For avoidance of ambiguity, there should only be 1 <name> tag immediately in
@ -211,6 +211,7 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
<type requires="openxr_platform_defines" name="float"/> <type requires="openxr_platform_defines" name="float"/>
<type requires="openxr_platform_defines" name="int8_t"/> <type requires="openxr_platform_defines" name="int8_t"/>
<type requires="openxr_platform_defines" name="uint8_t"/> <type requires="openxr_platform_defines" name="uint8_t"/>
<type requires="openxr_platform_defines" name="uint16_t"/>
<type requires="openxr_platform_defines" name="int32_t"/> <type requires="openxr_platform_defines" name="int32_t"/>
<type requires="openxr_platform_defines" name="uint32_t"/> <type requires="openxr_platform_defines" name="uint32_t"/>
<type requires="openxr_platform_defines" name="int64_t"/> <type requires="openxr_platform_defines" name="int64_t"/>
@ -241,6 +242,9 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
<type bitvalues="XrOverlayMainSessionFlagBitsEXTX" category="bitmask">typedef <type>XrFlags64</type> <name>XrOverlayMainSessionFlagsEXTX</name>;</type> <type bitvalues="XrOverlayMainSessionFlagBitsEXTX" category="bitmask">typedef <type>XrFlags64</type> <name>XrOverlayMainSessionFlagsEXTX</name>;</type>
<type bitvalues="XrOverlaySessionCreateFlagBitsEXTX" category="bitmask">typedef <type>XrFlags64</type> <name>XrOverlaySessionCreateFlagsEXTX</name>;</type> <type bitvalues="XrOverlaySessionCreateFlagBitsEXTX" category="bitmask">typedef <type>XrFlags64</type> <name>XrOverlaySessionCreateFlagsEXTX</name>;</type>
<!-- Bitmask types for XR_FB_android_surface_swapchain_create -->
<type bitvalues="XrAndroidSurfaceSwapchainFlagBitsFB" category="bitmask">typedef <type>XrFlags64</type> <name>XrAndroidSurfaceSwapchainFlagsFB</name>;</type>
<!-- Handles referring to internally-maintained objects. --> <!-- Handles referring to internally-maintained objects. -->
<!-- These types which can be 64-bit integers or opaque pointers, selected at compile time based on pointer size --> <!-- These types which can be 64-bit integers or opaque pointers, selected at compile time based on pointer size -->
<type category="handle"><type>XR_DEFINE_HANDLE</type>(<name>XrInstance</name>)</type> <type category="handle"><type>XR_DEFINE_HANDLE</type>(<name>XrInstance</name>)</type>
@ -298,6 +302,9 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
<!-- enums for XR_MSFT_spatial_graph_bridge --> <!-- enums for XR_MSFT_spatial_graph_bridge -->
<type name="XrSpatialGraphNodeTypeMSFT" category="enum"/> <type name="XrSpatialGraphNodeTypeMSFT" category="enum"/>
<!-- enums and flag bits for XR_FB_android_surface_swapchain_create -->
<type name="XrAndroidSurfaceSwapchainFlagBitsFB" category="enum"/>
<!-- Struct types --> <!-- Struct types -->
<type category="struct" name="XrVector2f"> <type category="struct" name="XrVector2f">
<member><type>float</type> <name>x</name></member> <member><type>float</type> <name>x</name></member>
@ -993,20 +1000,20 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
<member values="XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR"><type>XrStructureType</type> <name>type</name></member> <member values="XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR"><type>XrStructureType</type> <name>type</name></member>
<member>const <type>void</type>* <name>next</name></member> <member>const <type>void</type>* <name>next</name></member>
<member><type>XrSystemId</type> <name>systemId</name></member> <member><type>XrSystemId</type> <name>systemId</name></member>
<member><type>XrVulkanInstanceCreateFlagsKHR</type> <name>createFlags</name></member> <member optional="true"><type>XrVulkanInstanceCreateFlagsKHR</type> <name>createFlags</name></member>
<member><type>PFN_vkGetInstanceProcAddr</type> <name>pfnGetInstanceProcAddr</name></member> <member><type>PFN_vkGetInstanceProcAddr</type> <name>pfnGetInstanceProcAddr</name></member>
<member>const <type>VkInstanceCreateInfo</type>* <name>vulkanCreateInfo</name></member> <member>const <type>VkInstanceCreateInfo</type>* <name>vulkanCreateInfo</name></member>
<member>const <type>VkAllocationCallbacks</type>* <name>vulkanAllocator</name></member> <member optional="true">const <type>VkAllocationCallbacks</type>* <name>vulkanAllocator</name></member>
</type> </type>
<type category="struct" name="XrVulkanDeviceCreateInfoKHR"> <type category="struct" name="XrVulkanDeviceCreateInfoKHR">
<member values="XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR"><type>XrStructureType</type> <name>type</name></member> <member values="XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR"><type>XrStructureType</type> <name>type</name></member>
<member>const <type>void</type>* <name>next</name></member> <member>const <type>void</type>* <name>next</name></member>
<member><type>XrSystemId</type> <name>systemId</name></member> <member><type>XrSystemId</type> <name>systemId</name></member>
<member><type>XrVulkanDeviceCreateFlagsKHR</type> <name>createFlags</name></member> <member optional="true"><type>XrVulkanDeviceCreateFlagsKHR</type> <name>createFlags</name></member>
<member><type>PFN_vkGetInstanceProcAddr</type> <name>pfnGetInstanceProcAddr</name></member> <member><type>PFN_vkGetInstanceProcAddr</type> <name>pfnGetInstanceProcAddr</name></member>
<member><type>VkPhysicalDevice</type> <name>vulkanPhysicalDevice</name></member> <member><type>VkPhysicalDevice</type> <name>vulkanPhysicalDevice</name></member>
<member>const <type>VkDeviceCreateInfo</type>* <name>vulkanCreateInfo</name></member> <member>const <type>VkDeviceCreateInfo</type>* <name>vulkanCreateInfo</name></member>
<member>const <type>VkAllocationCallbacks</type>* <name>vulkanAllocator</name></member> <member optional="true">const <type>VkAllocationCallbacks</type>* <name>vulkanAllocator</name></member>
</type> </type>
<type category="struct" name="XrGraphicsBindingVulkan2KHR" alias="XrGraphicsBindingVulkanKHR" /> <type category="struct" name="XrGraphicsBindingVulkan2KHR" alias="XrGraphicsBindingVulkanKHR" />
<type category="struct" name="XrVulkanGraphicsDeviceGetInfoKHR"> <type category="struct" name="XrVulkanGraphicsDeviceGetInfoKHR">
@ -1164,7 +1171,7 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
<member><type>XrTime</type> <name>time</name></member> <member><type>XrTime</type> <name>time</name></member>
</type> </type>
<type category="struct" name="XrHandJointLocationEXT"> <type category="struct" name="XrHandJointLocationEXT">
<member><type>XrSpaceLocationFlags</type> <name>locationFlags</name></member> <member optional="true"><type>XrSpaceLocationFlags</type> <name>locationFlags</name></member>
<member><type>XrPosef</type> <name>pose</name></member> <member><type>XrPosef</type> <name>pose</name></member>
<member><type>float</type> <name>radius</name></member> <member><type>float</type> <name>radius</name></member>
</type> </type>
@ -1286,6 +1293,13 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
<member><type>IUnknown</type>* <name>coreWindow</name></member> <member><type>IUnknown</type>* <name>coreWindow</name></member>
</type> </type>
<!-- XR_FB_android_surface_swapchain_create -->
<type category="struct" name="XrAndroidSurfaceSwapchainCreateInfoFB" structextends="XrSwapchainCreateInfo" protect="XR_USE_PLATFORM_ANDROID">
<member values="XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB"><type>XrStructureType</type> <name>type</name></member>
<member>const <type>void</type>* <name>next</name></member>
<member><type>XrAndroidSurfaceSwapchainFlagsFB</type> <name>createFlags</name></member>
</type>
<!-- XR_KHR_loader_init --> <!-- XR_KHR_loader_init -->
<type category="struct" name="XrLoaderInitInfoBaseHeaderKHR"> <type category="struct" name="XrLoaderInitInfoBaseHeaderKHR">
<member><type>XrStructureType</type> <name>type</name></member> <member><type>XrStructureType</type> <name>type</name></member>
@ -1363,6 +1377,33 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
<member><type>XrColorSpaceFB</type> <name>colorSpace</name></member> <member><type>XrColorSpaceFB</type> <name>colorSpace</name></member>
</type> </type>
<!-- XR_VARJO_composition_layer_depth_test -->
<type category="struct" name="XrCompositionLayerDepthTestVARJO" structextends="XrCompositionLayerProjection">
<member values="XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO"><type>XrStructureType</type> <name>type</name></member>
<member>const <type>void</type>* <name>next</name></member>
<member><type>float</type> <name>depthTestRangeNearZ</name></member>
<member><type>float</type> <name>depthTestRangeFarZ</name></member>
</type>
<!-- XR_VARJO_foveated_rendering -->
<type category="struct" name="XrViewLocateFoveatedRenderingVARJO" structextends="XrViewLocateInfo">
<member values="XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO"><type>XrStructureType</type> <name>type</name></member>
<member>const <type>void</type>* <name>next</name></member>
<member><type>XrBool32</type> <name>foveatedRenderingActive</name></member>
</type>
<type category="struct" name="XrFoveatedViewConfigurationViewVARJO" structextends="XrViewConfigurationView" >
<member values="XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO"><type>XrStructureType</type> <name>type</name></member>
<member><type>void</type>* <name>next</name></member>
<member><type>XrBool32</type> <name>foveatedRenderingActive</name></member>
</type>
<type category="struct" name="XrSystemFoveatedRenderingPropertiesVARJO" structextends="XrSystemProperties">
<member values="XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO"><type>XrStructureType</type> <name>type</name></member>
<member><type>void</type>* <name>next</name></member>
<member><type>XrBool32</type> <name>supportsFoveatedRendering</name></member>
</type>
</types> </types>
<!-- SECTION: OpenXR enumerant (token) definitions. --> <!-- SECTION: OpenXR enumerant (token) definitions. -->
@ -1485,7 +1526,7 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
<enum value="-27" name="XR_ERROR_ACTION_TYPE_MISMATCH" comment="The API used to retrieve an action's state does not match the action's type."/> <enum value="-27" name="XR_ERROR_ACTION_TYPE_MISMATCH" comment="The API used to retrieve an action's state does not match the action's type."/>
<enum value="-28" name="XR_ERROR_SESSION_NOT_READY" comment="The session is not in the ready state."/> <enum value="-28" name="XR_ERROR_SESSION_NOT_READY" comment="The session is not in the ready state."/>
<enum value="-29" name="XR_ERROR_SESSION_NOT_STOPPING" comment="The session is not in the stopping state."/> <enum value="-29" name="XR_ERROR_SESSION_NOT_STOPPING" comment="The session is not in the stopping state."/>
<enum value="-30" name="XR_ERROR_TIME_INVALID" comment="The provided XrTime was zero, negative, or out of range."/> <enum value="-30" name="XR_ERROR_TIME_INVALID" comment="The provided basetype:XrTime was zero, negative, or out of range."/>
<enum value="-31" name="XR_ERROR_REFERENCE_SPACE_UNSUPPORTED" comment="The specified reference space is not supported by the runtime or system."/> <enum value="-31" name="XR_ERROR_REFERENCE_SPACE_UNSUPPORTED" comment="The specified reference space is not supported by the runtime or system."/>
<enum value="-32" name="XR_ERROR_FILE_ACCESS_ERROR" comment="The file could not be accessed."/> <enum value="-32" name="XR_ERROR_FILE_ACCESS_ERROR" comment="The file could not be accessed."/>
<enum value="-33" name="XR_ERROR_FILE_CONTENTS_INVALID" comment="The file's contents were invalid."/> <enum value="-33" name="XR_ERROR_FILE_CONTENTS_INVALID" comment="The file's contents were invalid."/>
@ -1504,7 +1545,7 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
<enum value="-47" name="XR_ERROR_ACTIONSETS_ALREADY_ATTACHED" comment="The session already has attached action sets." /> <enum value="-47" name="XR_ERROR_ACTIONSETS_ALREADY_ATTACHED" comment="The session already has attached action sets." />
<enum value="-48" name="XR_ERROR_LOCALIZED_NAME_DUPLICATED" comment="The localized name provided was a duplicate of an already-existing resource."/> <enum value="-48" name="XR_ERROR_LOCALIZED_NAME_DUPLICATED" comment="The localized name provided was a duplicate of an already-existing resource."/>
<enum value="-49" name="XR_ERROR_LOCALIZED_NAME_INVALID" comment="The localized name provided was invalid."/> <enum value="-49" name="XR_ERROR_LOCALIZED_NAME_INVALID" comment="The localized name provided was invalid."/>
<enum value="-50" name="XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING" comment="The xrGetGraphicsRequirements* call was not made before calling xrCreateSession."/> <enum value="-50" name="XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING" comment="The fname:xrGetGraphicsRequirements* call was not made before calling fname:xrCreateSession."/>
<unused start="-100"/> <unused start="-100"/>
</enums> </enums>
<enums name="XrObjectType" type="enum" comment="Enums to track objects of various types"> <enums name="XrObjectType" type="enum" comment="Enums to track objects of various types">
@ -1743,7 +1784,6 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
<enum bitpos="0" name="XR_OVERLAY_MAIN_SESSION_ENABLED_COMPOSITION_LAYER_INFO_DEPTH_BIT_EXTX" comment="Indicates the main session enabled XR_KHR_extra_layer_info_depth"/> <enum bitpos="0" name="XR_OVERLAY_MAIN_SESSION_ENABLED_COMPOSITION_LAYER_INFO_DEPTH_BIT_EXTX" comment="Indicates the main session enabled XR_KHR_extra_layer_info_depth"/>
</enums> </enums>
<enums name="XrOverlaySessionCreateFlagBitsEXTX" type="bitmask"> <enums name="XrOverlaySessionCreateFlagBitsEXTX" type="bitmask">
<enum bitpos="0" name="XR_OVERLAY_SESSION_CREATE_RELAXED_DISPLAY_TIME_BIT_EXTX" comment="Indicates the runtime does not need to attempt to lock the overlay session displayTime to the main session displayTime"/>
</enums> </enums>
<!-- enumes XR_MSFT_spatial_graph_bridge --> <!-- enumes XR_MSFT_spatial_graph_bridge -->
@ -1752,6 +1792,12 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
<enum value="2" name="XR_SPATIAL_GRAPH_NODE_TYPE_DYNAMIC_MSFT" /> <enum value="2" name="XR_SPATIAL_GRAPH_NODE_TYPE_DYNAMIC_MSFT" />
</enums> </enums>
<!-- flags for XR_FB_android_surface_swapchain_create -->
<enums name="XrAndroidSurfaceSwapchainFlagBitsFB" type="bitmask">
<enum bitpos="0" name="XR_ANDROID_SURFACE_SWAPCHAIN_SYNCHRONOUS_BIT_FB" comment="Create the underlying BufferQueue in synchronous mode"/>
<enum bitpos="1" name="XR_ANDROID_SURFACE_SWAPCHAIN_USE_TIMESTAMPS_BIT_FB" comment="Acquire most recent buffer whose presentation timestamp is not greater than display time of final composited frame"/>
</enums>
<!-- SECTION: OpenXR command definitions --> <!-- SECTION: OpenXR command definitions -->
<commands> <commands>
<command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_HANDLE_INVALID,XR_ERROR_INSTANCE_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_OUT_OF_MEMORY,XR_ERROR_FUNCTION_UNSUPPORTED,XR_ERROR_VALIDATION_FAILURE"> <command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_HANDLE_INVALID,XR_ERROR_INSTANCE_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_OUT_OF_MEMORY,XR_ERROR_FUNCTION_UNSUPPORTED,XR_ERROR_VALIDATION_FAILURE">
@ -2101,7 +2147,7 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
<param><type>XrSystemId</type> <name>systemId</name></param> <param><type>XrSystemId</type> <name>systemId</name></param>
<param optional="true"><type>uint32_t</type> <name>bufferCapacityInput</name></param> <param optional="true"><type>uint32_t</type> <name>bufferCapacityInput</name></param>
<param><type>uint32_t</type>* <name>bufferCountOutput</name></param> <param><type>uint32_t</type>* <name>bufferCountOutput</name></param>
<param optional="true" len="bufferCapacityInput,null-terminated"><type>char</type>* <name>buffer</name></param> <param optional="true" len="bufferCapacityInput"><type>char</type>* <name>buffer</name></param>
</command> </command>
<command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_HANDLE_INVALID,XR_ERROR_SYSTEM_INVALID,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_SIZE_INSUFFICIENT,XR_ERROR_FUNCTION_UNSUPPORTED"> <command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_HANDLE_INVALID,XR_ERROR_SYSTEM_INVALID,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_SIZE_INSUFFICIENT,XR_ERROR_FUNCTION_UNSUPPORTED">
<proto><type>XrResult</type> <name>xrGetVulkanDeviceExtensionsKHR</name></proto> <proto><type>XrResult</type> <name>xrGetVulkanDeviceExtensionsKHR</name></proto>
@ -2109,7 +2155,7 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
<param><type>XrSystemId</type> <name>systemId</name></param> <param><type>XrSystemId</type> <name>systemId</name></param>
<param optional="true"><type>uint32_t</type> <name>bufferCapacityInput</name></param> <param optional="true"><type>uint32_t</type> <name>bufferCapacityInput</name></param>
<param><type>uint32_t</type>* <name>bufferCountOutput</name></param> <param><type>uint32_t</type>* <name>bufferCountOutput</name></param>
<param optional="true" len="bufferCapacityInput,null-terminated"><type>char</type>* <name>buffer</name></param> <param optional="true" len="bufferCapacityInput"><type>char</type>* <name>buffer</name></param>
</command> </command>
<command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_HANDLE_INVALID,XR_ERROR_INSTANCE_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_SYSTEM_INVALID,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_FUNCTION_UNSUPPORTED"> <command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_HANDLE_INVALID,XR_ERROR_INSTANCE_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_SYSTEM_INVALID,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_FUNCTION_UNSUPPORTED">
<proto><type>XrResult</type> <name>xrGetVulkanGraphicsDeviceKHR</name></proto> <proto><type>XrResult</type> <name>xrGetVulkanGraphicsDeviceKHR</name></proto>
@ -2239,7 +2285,7 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
</command> </command>
<command name="xrGetVulkanGraphicsRequirements2KHR" alias="xrGetVulkanGraphicsRequirementsKHR" /> <command name="xrGetVulkanGraphicsRequirements2KHR" alias="xrGetVulkanGraphicsRequirementsKHR" />
<!-- commands for XR_KHR_convert_timespec_time --> <!-- commands for XR_KHR_convert_timespec_time -->
<command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_HANDLE_INVALID,XR_ERROR_INSTANCE_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_TIME_INVALID,XR_ERROR_FUNCTION_UNSUPPORTED"> <command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_HANDLE_INVALID,XR_ERROR_INSTANCE_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_TIME_INVALID,XR_ERROR_FUNCTION_UNSUPPORTED">
<proto><type>XrResult</type> <name>xrConvertTimeToTimespecTimeKHR</name></proto> <proto><type>XrResult</type> <name>xrConvertTimeToTimespecTimeKHR</name></proto>
<param><type>XrInstance</type> <name>instance</name></param> <param><type>XrInstance</type> <name>instance</name></param>
@ -2448,6 +2494,13 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
<param><type>XrSession</type> <name>session</name></param> <param><type>XrSession</type> <name>session</name></param>
<param>const <type>XrColorSpaceFB</type> <name>colorspace</name></param> <param>const <type>XrColorSpaceFB</type> <name>colorspace</name></param>
</command> </command>
<!-- commands for XR_VARJO_environment_depth_estimation -->
<command successcodes="XR_SUCCESS,XR_SESSION_LOSS_PENDING" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_SESSION_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_HANDLE_INVALID,XR_ERROR_FEATURE_UNSUPPORTED,XR_ERROR_FUNCTION_UNSUPPORTED">
<proto><type>XrResult</type> <name>xrSetEnvironmentDepthEstimationVARJO</name></proto>
<param><type>XrSession</type> <name>session</name></param>
<param><type>XrBool32</type> <name>enabled</name></param>
</command>
</commands> </commands>
<!-- SECTION: OpenXR API interface definitions --> <!-- SECTION: OpenXR API interface definitions -->
@ -2682,7 +2735,7 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
<!-- Vulkan image format list extension --> <!-- Vulkan image format list extension -->
<extension name="XR_KHR_vulkan_swapchain_format_list" number="15" type="instance" requires="XR_KHR_vulkan_enable" supported="openxr" protect="XR_USE_GRAPHICS_API_VULKAN"> <extension name="XR_KHR_vulkan_swapchain_format_list" number="15" type="instance" requires="XR_KHR_vulkan_enable" supported="openxr" protect="XR_USE_GRAPHICS_API_VULKAN">
<require> <require>
<enum value="3" name="XR_KHR_vulkan_swapchain_format_list_SPEC_VERSION"/> <enum value="4" name="XR_KHR_vulkan_swapchain_format_list_SPEC_VERSION"/>
<enum value="&quot;XR_KHR_vulkan_swapchain_format_list&quot;" name="XR_KHR_VULKAN_SWAPCHAIN_FORMAT_LIST_EXTENSION_NAME"/> <enum value="&quot;XR_KHR_vulkan_swapchain_format_list&quot;" name="XR_KHR_VULKAN_SWAPCHAIN_FORMAT_LIST_EXTENSION_NAME"/>
<enum offset="0" extends="XrStructureType" name="XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR"/> <enum offset="0" extends="XrStructureType" name="XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR"/>
<type name="XrVulkanSwapchainFormatListCreateInfoKHR"/> <type name="XrVulkanSwapchainFormatListCreateInfoKHR"/>
@ -2692,7 +2745,7 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
<!-- Performance Settings extension --> <!-- Performance Settings extension -->
<extension name="XR_EXT_performance_settings" number="16" type="instance" supported="openxr"> <extension name="XR_EXT_performance_settings" number="16" type="instance" supported="openxr">
<require> <require>
<enum value="1" name="XR_EXT_performance_settings_SPEC_VERSION"/> <enum value="2" name="XR_EXT_performance_settings_SPEC_VERSION"/>
<enum value="&quot;XR_EXT_performance_settings&quot;" name="XR_EXT_PERFORMANCE_SETTINGS_EXTENSION_NAME"/> <enum value="&quot;XR_EXT_performance_settings&quot;" name="XR_EXT_PERFORMANCE_SETTINGS_EXTENSION_NAME"/>
<enum offset="0" extends="XrStructureType" name="XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT"/> <enum offset="0" extends="XrStructureType" name="XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT"/>
<type name="XrPerfSettingsDomainEXT"/> <type name="XrPerfSettingsDomainEXT"/>
@ -2815,7 +2868,7 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
<!-- Vulkan graphics binding extension --> <!-- Vulkan graphics binding extension -->
<extension name="XR_KHR_vulkan_enable" number="26" type="instance" protect="XR_USE_GRAPHICS_API_VULKAN" supported="openxr"> <extension name="XR_KHR_vulkan_enable" number="26" type="instance" protect="XR_USE_GRAPHICS_API_VULKAN" supported="openxr">
<require> <require>
<enum value="7" name="XR_KHR_vulkan_enable_SPEC_VERSION"/> <enum value="8" name="XR_KHR_vulkan_enable_SPEC_VERSION"/>
<enum value="&quot;XR_KHR_vulkan_enable&quot;" name="XR_KHR_VULKAN_ENABLE_EXTENSION_NAME"/> <enum value="&quot;XR_KHR_vulkan_enable&quot;" name="XR_KHR_VULKAN_ENABLE_EXTENSION_NAME"/>
<enum offset="0" extends="XrStructureType" name="XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR"/> <enum offset="0" extends="XrStructureType" name="XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR"/>
<enum offset="1" extends="XrStructureType" name="XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR"/> <enum offset="1" extends="XrStructureType" name="XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR"/>
@ -2913,7 +2966,7 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
<!-- Overlay preview extension --> <!-- Overlay preview extension -->
<extension name="XR_EXTX_overlay" number="34" type="instance" provisional="true" supported="openxr"> <extension name="XR_EXTX_overlay" number="34" type="instance" provisional="true" supported="openxr">
<require> <require>
<enum value="4" name="XR_EXTX_overlay_SPEC_VERSION"/> <enum value="5" name="XR_EXTX_overlay_SPEC_VERSION"/>
<enum value="&quot;XR_EXTX_overlay&quot;" name="XR_EXTX_OVERLAY_EXTENSION_NAME"/> <enum value="&quot;XR_EXTX_overlay&quot;" name="XR_EXTX_OVERLAY_EXTENSION_NAME"/>
<enum offset="0" extends="XrStructureType" name="XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX"/> <enum offset="0" extends="XrStructureType" name="XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX"/>
<enum offset="3" extends="XrStructureType" name="XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX"/> <enum offset="3" extends="XrStructureType" name="XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX"/>
@ -3036,7 +3089,7 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
<extension name="XR_EXT_conformance_automation" number="48" type="instance" supported="openxr"> <extension name="XR_EXT_conformance_automation" number="48" type="instance" supported="openxr">
<require> <require>
<enum value="1" name="XR_EXT_conformance_automation_SPEC_VERSION"/> <enum value="2" name="XR_EXT_conformance_automation_SPEC_VERSION"/>
<enum value="&quot;XR_EXT_conformance_automation&quot;" name="XR_EXT_CONFORMANCE_AUTOMATION_EXTENSION_NAME"/> <enum value="&quot;XR_EXT_conformance_automation&quot;" name="XR_EXT_CONFORMANCE_AUTOMATION_EXTENSION_NAME"/>
<command name="xrSetInputDeviceActiveEXT"/> <command name="xrSetInputDeviceActiveEXT"/>
<command name="xrSetInputDeviceStateBoolEXT"/> <command name="xrSetInputDeviceStateBoolEXT"/>
@ -3075,7 +3128,7 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
<extension name="XR_EXT_hand_tracking" number="52" type="instance" supported="openxr"> <extension name="XR_EXT_hand_tracking" number="52" type="instance" supported="openxr">
<require> <require>
<enum value="2" name="XR_EXT_hand_tracking_SPEC_VERSION"/> <enum value="3" name="XR_EXT_hand_tracking_SPEC_VERSION"/>
<enum value="&quot;XR_EXT_hand_tracking&quot;" name="XR_EXT_HAND_TRACKING_EXTENSION_NAME"/> <enum value="&quot;XR_EXT_hand_tracking&quot;" name="XR_EXT_HAND_TRACKING_EXTENSION_NAME"/>
<command name="xrCreateHandTrackerEXT"/> <command name="xrCreateHandTrackerEXT"/>
@ -3108,7 +3161,7 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
<extension name="XR_MSFT_hand_tracking_mesh" number="53" <extension name="XR_MSFT_hand_tracking_mesh" number="53"
requires="XR_EXT_hand_tracking" type="instance" supported="openxr"> requires="XR_EXT_hand_tracking" type="instance" supported="openxr">
<require> <require>
<enum value="2" name="XR_MSFT_hand_tracking_mesh_SPEC_VERSION"/> <enum value="3" name="XR_MSFT_hand_tracking_mesh_SPEC_VERSION"/>
<enum value="&quot;XR_MSFT_hand_tracking_mesh&quot;" name="XR_MSFT_HAND_TRACKING_MESH_EXTENSION_NAME"/> <enum value="&quot;XR_MSFT_hand_tracking_mesh&quot;" name="XR_MSFT_HAND_TRACKING_MESH_EXTENSION_NAME"/>
<command name="xrCreateHandMeshSpaceMSFT"/> <command name="xrCreateHandMeshSpaceMSFT"/>
@ -3209,10 +3262,10 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
</require> </require>
</extension> </extension>
<extension name="XR_MAGICLEAP_extension_59" number="59" type="instance" supported="disabled"> <extension name="XR_ML_extension_59" number="59" type="instance" supported="disabled">
<require> <require>
<enum value="1" name="XR_MAGICLEAP_extension_59_SPEC_VERSION"/> <enum value="1" name="XR_ML_extension_59_SPEC_VERSION"/>
<enum value="&quot;XR_MAGICLEAP_extension_59&quot;" name="XR_MAGICLEAP_extension_59_EXTENSION_NAME"/> <enum value="&quot;XR_ML_extension_59&quot;" name="XR_ML_extension_59_EXTENSION_NAME"/>
</require> </require>
</extension> </extension>
@ -3283,10 +3336,13 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
</require> </require>
</extension> </extension>
<extension name="XR_FB_extension_71" number="71" type="instance" supported="disabled"> <extension name="XR_FB_android_surface_swapchain_create" number="71" type="instance" supported="openxr" protect="XR_USE_PLATFORM_ANDROID" requires="XR_KHR_android_surface_swapchain">
<require> <require>
<enum value="1" name="XR_FB_extension_71_SPEC_VERSION"/> <enum value="1" name="XR_FB_android_surface_swapchain_create_SPEC_VERSION"/>
<enum value="&quot;XR_FB_extension_71&quot;" name="XR_FB_extension_71_EXTENSION_NAME"/> <enum value="&quot;XR_FB_android_surface_swapchain_create&quot;" name="XR_FB_ANDROID_SURFACE_SWAPCHAIN_CREATE_EXTENSION_NAME"/>
<type name="XrAndroidSurfaceSwapchainCreateInfoFB"/>
<enum offset="0" extends="XrStructureType" name="XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB"/>
</require> </require>
</extension> </extension>
@ -3431,7 +3487,7 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
<extension name="XR_KHR_vulkan_enable2" number="91" type="instance" protect="XR_USE_GRAPHICS_API_VULKAN" supported="openxr"> <extension name="XR_KHR_vulkan_enable2" number="91" type="instance" protect="XR_USE_GRAPHICS_API_VULKAN" supported="openxr">
<require> <require>
<enum value="1" name="XR_KHR_vulkan_enable2_SPEC_VERSION"/> <enum value="2" name="XR_KHR_vulkan_enable2_SPEC_VERSION"/>
<enum value="&quot;XR_KHR_vulkan_enable2&quot;" name="XR_KHR_VULKAN_ENABLE2_EXTENSION_NAME"/> <enum value="&quot;XR_KHR_vulkan_enable2&quot;" name="XR_KHR_VULKAN_ENABLE2_EXTENSION_NAME"/>
<enum offset="0" extends="XrStructureType" name="XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR"/> <enum offset="0" extends="XrStructureType" name="XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR"/>
<enum offset="1" extends="XrStructureType" name="XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR"/> <enum offset="1" extends="XrStructureType" name="XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR"/>
@ -3467,6 +3523,7 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
<enum value="&quot;XR_EXT_extension_93&quot;" name="XR_EXT_extension_93_EXTENSION_NAME"/> <enum value="&quot;XR_EXT_extension_93&quot;" name="XR_EXT_extension_93_EXTENSION_NAME"/>
</require> </require>
</extension> </extension>
<extension name="XR_EXT_extension_94" number="94" type="instance" supported="disabled"> <extension name="XR_EXT_extension_94" number="94" type="instance" supported="disabled">
<require> <require>
<enum value="1" name="XR_EXT_extension_94_SPEC_VERSION"/> <enum value="1" name="XR_EXT_extension_94_SPEC_VERSION"/>
@ -3502,18 +3559,21 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
<enum value="&quot;XR_MSFT_extension_98&quot;" name="XR_MSFT_extension_98_EXTENSION_NAME"/> <enum value="&quot;XR_MSFT_extension_98&quot;" name="XR_MSFT_extension_98_EXTENSION_NAME"/>
</require> </require>
</extension> </extension>
<extension name="XR_MSFT_extension_99" number="99" type="instance" supported="disabled"> <extension name="XR_MSFT_extension_99" number="99" type="instance" supported="disabled">
<require> <require>
<enum value="1" name="XR_MSFT_extension_99_SPEC_VERSION"/> <enum value="1" name="XR_MSFT_extension_99_SPEC_VERSION"/>
<enum value="&quot;XR_MSFT_extension_99&quot;" name="XR_MSFT_extension_99_EXTENSION_NAME"/> <enum value="&quot;XR_MSFT_extension_99&quot;" name="XR_MSFT_extension_99_EXTENSION_NAME"/>
</require> </require>
</extension> </extension>
<extension name="XR_MSFT_extension_100" number="100" type="instance" supported="disabled"> <extension name="XR_MSFT_extension_100" number="100" type="instance" supported="disabled">
<require> <require>
<enum value="1" name="XR_MSFT_extension_100_SPEC_VERSION"/> <enum value="1" name="XR_MSFT_extension_100_SPEC_VERSION"/>
<enum value="&quot;XR_MSFT_extension_100&quot;" name="XR_MSFT_extension_100_EXTENSION_NAME"/> <enum value="&quot;XR_MSFT_extension_100&quot;" name="XR_MSFT_extension_100_EXTENSION_NAME"/>
</require> </require>
</extension> </extension>
<extension name="XR_MSFT_extension_101" number="101" type="instance" supported="disabled"> <extension name="XR_MSFT_extension_101" number="101" type="instance" supported="disabled">
<require> <require>
<enum value="1" name="XR_MSFT_extension_101_SPEC_VERSION"/> <enum value="1" name="XR_MSFT_extension_101_SPEC_VERSION"/>
@ -3670,6 +3730,7 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
<enum value="&quot;XR_FB_extension_120&quot;" name="XR_FB_extension_120_EXTENSION_NAME"/> <enum value="&quot;XR_FB_extension_120&quot;" name="XR_FB_extension_120_EXTENSION_NAME"/>
</require> </require>
</extension> </extension>
<extension name="XR_KHR_binding_modification" number="121" type="instance" supported="openxr"> <extension name="XR_KHR_binding_modification" number="121" type="instance" supported="openxr">
<require> <require>
<enum value="1" name="XR_KHR_binding_modification_SPEC_VERSION"/> <enum value="1" name="XR_KHR_binding_modification_SPEC_VERSION"/>
@ -3679,6 +3740,327 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
<type name="XrBindingModificationBaseHeaderKHR"/> <type name="XrBindingModificationBaseHeaderKHR"/>
</require> </require>
</extension> </extension>
<extension name="XR_VARJO_foveated_rendering" number="122" type="instance" requires="XR_VARJO_quad_views" supported="openxr">
<require>
<enum value="1" name="XR_VARJO_foveated_rendering_SPEC_VERSION"/>
<enum value="&quot;XR_VARJO_foveated_rendering&quot;" name="XR_VARJO_FOVEATED_RENDERING_EXTENSION_NAME"/>
<enum offset="0" extends="XrStructureType" name="XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO"/>
<enum offset="1" extends="XrStructureType" name="XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO"/>
<enum offset="2" extends="XrStructureType" name="XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO"/>
<enum offset="0" extends="XrReferenceSpaceType" name="XR_REFERENCE_SPACE_TYPE_COMBINED_EYE_VARJO"/>
<type name="XrViewLocateFoveatedRenderingVARJO"/>
<type name="XrFoveatedViewConfigurationViewVARJO"/>
<type name="XrSystemFoveatedRenderingPropertiesVARJO"/>
</require>
</extension>
<extension name="XR_VARJO_composition_layer_depth_test" number="123" type="instance" requires="XR_KHR_composition_layer_depth" supported="openxr">
<require>
<enum value="1" name="XR_VARJO_composition_layer_depth_test_SPEC_VERSION"/>
<enum value="&quot;XR_VARJO_composition_layer_depth_test&quot;" name="XR_VARJO_COMPOSITION_LAYER_DEPTH_TEST_EXTENSION_NAME"/>
<enum offset="0" extends="XrStructureType" name="XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO"/>
<type name="XrCompositionLayerDepthTestVARJO"/>
</require>
</extension>
<extension name="XR_VARJO_environment_depth_estimation" number="124" type="instance" supported="openxr">
<require>
<enum value="1" name="XR_VARJO_environment_depth_estimation_SPEC_VERSION"/>
<enum value="&quot;XR_VARJO_environment_depth_estimation&quot;" name="XR_VARJO_ENVIRONMENT_DEPTH_ESTIMATION_EXTENSION_NAME"/>
<command name="xrSetEnvironmentDepthEstimationVARJO" />
</require>
</extension>
<extension name="XR_VARJO_extension_125" number="125" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_VARJO_extension_125_SPEC_VERSION"/>
<enum value="&quot;XR_VARJO_extension_125&quot;" name="XR_VARJO_extension_125_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_VARJO_extension_126" number="126" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_VARJO_extension_126_SPEC_VERSION"/>
<enum value="&quot;XR_VARJO_extension_126&quot;" name="XR_VARJO_extension_126_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_VARJO_extension_127" number="127" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_VARJO_extension_127_SPEC_VERSION"/>
<enum value="&quot;XR_VARJO_extension_127&quot;" name="XR_VARJO_extension_127_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_VARJO_extension_128" number="128" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_VARJO_extension_128_SPEC_VERSION"/>
<enum value="&quot;XR_VARJO_extension_128&quot;" name="XR_VARJO_extension_128_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_VARJO_extension_129" number="129" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_VARJO_extension_129_SPEC_VERSION"/>
<enum value="&quot;XR_VARJO_extension_129&quot;" name="XR_VARJO_extension_129_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_VARJO_extension_130" number="130" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_VARJO_extension_130_SPEC_VERSION"/>
<enum value="&quot;XR_VARJO_extension_130&quot;" name="XR_VARJO_extension_130_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_VARJO_extension_131" number="131" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_VARJO_extension_131_SPEC_VERSION"/>
<enum value="&quot;XR_VARJO_extension_131&quot;" name="XR_VARJO_extension_131_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_VARJO_extension_132" number="132" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_VARJO_extension_132_SPEC_VERSION"/>
<enum value="&quot;XR_VARJO_extension_132&quot;" name="XR_VARJO_extension_132_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_ML_extension_133" number="133" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_ML_extension_133_SPEC_VERSION"/>
<enum value="&quot;XR_ML_extension_133&quot;" name="XR_ML_extension_133_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_ML_extension_134" number="134" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_ML_extension_134_SPEC_VERSION"/>
<enum value="&quot;XR_ML_extension_134&quot;" name="XR_ML_extension_134_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_ML_extension_135" number="135" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_ML_extension_135_SPEC_VERSION"/>
<enum value="&quot;XR_ML_extension_135&quot;" name="XR_ML_extension_135_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_ML_extension_136" number="136" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_ML_extension_136_SPEC_VERSION"/>
<enum value="&quot;XR_ML_extension_136&quot;" name="XR_ML_extension_136_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_ML_extension_137" number="137" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_ML_extension_137_SPEC_VERSION"/>
<enum value="&quot;XR_ML_extension_137&quot;" name="XR_ML_extension_137_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_ML_extension_138" number="138" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_ML_extension_138_SPEC_VERSION"/>
<enum value="&quot;XR_ML_extension_138&quot;" name="XR_ML_extension_138_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_ML_extension_139" number="139" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_ML_extension_139_SPEC_VERSION"/>
<enum value="&quot;XR_ML_extension_139&quot;" name="XR_ML_extension_139_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_ML_extension_140" number="140" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_ML_extension_140_SPEC_VERSION"/>
<enum value="&quot;XR_ML_extension_140&quot;" name="XR_ML_extension_140_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_ML_extension_141" number="141" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_ML_extension_141_SPEC_VERSION"/>
<enum value="&quot;XR_ML_extension_141&quot;" name="XR_ML_extension_141_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_ML_extension_142" number="142" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_ML_extension_142_SPEC_VERSION"/>
<enum value="&quot;XR_ML_extension_142&quot;" name="XR_ML_extension_142_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_MSFT_extension_143" number="143" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_MSFT_extension_143_SPEC_VERSION"/>
<enum value="&quot;XR_MSFT_extension_143&quot;" name="XR_MSFT_extension_143_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_MSFT_extension_144" number="144" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_MSFT_extension_144_SPEC_VERSION"/>
<enum value="&quot;XR_MSFT_extension_144&quot;" name="XR_MSFT_extension_144_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_MSFT_extension_145" number="145" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_MSFT_extension_145_SPEC_VERSION"/>
<enum value="&quot;XR_MSFT_extension_145&quot;" name="XR_MSFT_extension_145_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_MSFT_extension_146" number="146" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_MSFT_extension_146_SPEC_VERSION"/>
<enum value="&quot;XR_MSFT_extension_146&quot;" name="XR_MSFT_extension_146_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_MSFT_extension_147" number="147" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_MSFT_extension_147_SPEC_VERSION"/>
<enum value="&quot;XR_MSFT_extension_147&quot;" name="XR_MSFT_extension_147_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_MSFT_extension_148" number="148" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_MSFT_extension_148_SPEC_VERSION"/>
<enum value="&quot;XR_MSFT_extension_148&quot;" name="XR_MSFT_extension_148_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_KHR_extension_149" number="149" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_KHR_extension_149_SPEC_VERSION"/>
<enum value="&quot;XR_KHR_extension_149&quot;" name="XR_KHR_extension_149_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_ULTRALEAP_extension_150" number="150" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_ULTRALEAP_extension_150_SPEC_VERSION"/>
<enum value="&quot;XR_ULTRALEAP_extension_150&quot;" name="XR_ULTRALEAP_extension_150_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_ULTRALEAP_extension_151" number="151" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_ULTRALEAP_extension_151_SPEC_VERSION"/>
<enum value="&quot;XR_ULTRALEAP_extension_151&quot;" name="XR_ULTRALEAP_extension_151_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_ULTRALEAP_extension_152" number="152" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_ULTRALEAP_extension_152_SPEC_VERSION"/>
<enum value="&quot;XR_ULTRALEAP_extension_152&quot;" name="XR_ULTRALEAP_extension_152_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_ULTRALEAP_extension_153" number="153" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_ULTRALEAP_extension_153_SPEC_VERSION"/>
<enum value="&quot;XR_ULTRALEAP_extension_153&quot;" name="XR_ULTRALEAP_extension_153_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_ULTRALEAP_extension_154" number="154" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_ULTRALEAP_extension_154_SPEC_VERSION"/>
<enum value="&quot;XR_ULTRALEAP_extension_154&quot;" name="XR_ULTRALEAP_extension_154_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_ULTRALEAP_extension_155" number="155" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_ULTRALEAP_extension_155_SPEC_VERSION"/>
<enum value="&quot;XR_ULTRALEAP_extension_155&quot;" name="XR_ULTRALEAP_extension_155_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_FB_extension_156" number="156" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_FB_extension_156_SPEC_VERSION"/>
<enum value="&quot;XR_FB_extension_156&quot;" name="XR_FB_extension_156_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_FB_extension_157" number="157" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_FB_extension_157_SPEC_VERSION"/>
<enum value="&quot;XR_FB_extension_157&quot;" name="XR_FB_extension_157_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_FB_extension_158" number="158" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_FB_extension_158_SPEC_VERSION"/>
<enum value="&quot;XR_FB_extension_158&quot;" name="XR_FB_extension_158_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_FB_extension_159" number="159" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_FB_extension_159_SPEC_VERSION"/>
<enum value="&quot;XR_FB_extension_159&quot;" name="XR_FB_extension_159_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_FB_extension_160" number="160" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_FB_extension_160_SPEC_VERSION"/>
<enum value="&quot;XR_FB_extension_160&quot;" name="XR_FB_extension_160_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_FB_extension_161" number="161" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_FB_extension_161_SPEC_VERSION"/>
<enum value="&quot;XR_FB_extension_161&quot;" name="XR_FB_extension_161_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_FB_extension_162" number="162" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_FB_extension_162_SPEC_VERSION"/>
<enum value="&quot;XR_FB_extension_162&quot;" name="XR_FB_extension_162_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_FB_extension_163" number="163" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_FB_extension_163_SPEC_VERSION"/>
<enum value="&quot;XR_FB_extension_163&quot;" name="XR_FB_extension_163_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_FB_extension_164" number="164" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_FB_extension_164_SPEC_VERSION"/>
<enum value="&quot;XR_FB_extension_164&quot;" name="XR_FB_extension_164_EXTENSION_NAME"/>
</require>
</extension>
<extension name="XR_FB_extension_165" number="165" type="instance" supported="disabled">
<require>
<enum value="1" name="XR_FB_extension_165_SPEC_VERSION"/>
<enum value="&quot;XR_FB_extension_165&quot;" name="XR_FB_extension_165_EXTENSION_NAME"/>
</require>
</extension>
</extensions> </extensions>
</registry> </registry>