Skip to content

Commit 8e88ff2

Browse files
committed
OpenXR SDK 1.1.51 (2025-08-28)
This release adds a new API layer to assist developers in making an OpenXR application that follows best practices, along with a number of miscellaneous other fixes and improvements. - SDK - Added: New “best practices validation” API layer to check for application behavior that is valid but contradicts best practices. (internal MR 3735, internal MR 3976) - Fix: Include command alias in XR_LIST_FUNCTION_ macros in openxr_reflection.h. (internal MR 3915, internal issue 2222) - Fix: Consistent usage of XR_KHR_LOADER_INIT_SUPPORT defines. (internal MR 3936) - Fix: Migrate scripts to publish Android OpenXR loader AAR to Maven Central via new process. (internal MR 3978, internal issue 2499, internal MR 3975) - Improvement: enable clang-tidy bugprone-unused-local-non-trivial-variable check. (internal MR 3892) - Improvement: Fixed unused parameters in gfxwrapper. (internal MR 3894) - Improvement: Provide more useful metadata in the Android OpenXR loader AAR POM file. (internal MR 3978, internal issue 2499, internal MR 3975) - hello_xr: Fix Vulkan resource destruction bugs of ShaderProgram and Pipeline. (OpenXR-SDK-Source PR 538) - Registry - Chore: Reserve extension numbers. (internal MR 3916, internal MR 3956) - Fix: Missing parent struct for XrSpatialCapabilityConfigurationAnchorEXT. (internal MR 3932) - Fix: Missing XR_EXT_dpad_binding paths for /interaction_profiles/facebook/touch_controller_pro and /interaction_profiles/meta/touch_controller_plus. (internal MR 3945) - Fix: incorrect placement of * in XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING error description. (internal MR 3960) - Fix: Missing XR_EXT_dpad_binding paths for /interaction_profiles/varjo/xr-4_controller. (internal MR 3965) - Fix: Missing XR_EXT_dpad_binding, XR_EXT_palm_pose, and XR_EXT_hand_interaction bindings for /interaction_profiles/oppo/mr_controller_oppo. (internal MR 3966) GitOrigin-RevId: e1b9b9217bcb42d0b5748999f732e6af4c9100db
1 parent d0f5b6a commit 8e88ff2

24 files changed

+1005
-61
lines changed

.appveyor.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#
33
# SPDX-License-Identifier: Apache-2.0
44

5-
version: 1.1.50.{build}
5+
version: 1.1.51.{build}
66
image: Visual Studio 2017
77

88

CHANGELOG.SDK.md

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,61 @@ along with any public pull requests that have been accepted.
2121
In this repository in particular, since it is primarily software,
2222
pull requests may be integrated as they are accepted even between periodic updates.
2323

24+
## OpenXR SDK 1.1.51 (2025-08-28)
25+
26+
This release adds a new API layer to assist developers in making an OpenXR
27+
application that follows best practices, along with a number of miscellaneous
28+
other fixes and improvements.
29+
30+
- SDK
31+
- Added: New "best practices validation" API layer to check for application
32+
behavior that is valid but contradicts best practices.
33+
([internal MR 3735](https://gitlab.khronos.org/openxr/openxr/merge_requests/3735),
34+
[internal MR 3976](https://gitlab.khronos.org/openxr/openxr/merge_requests/3976))
35+
- Fix: Include command alias in `XR_LIST_FUNCTION_` macros in
36+
`openxr_reflection.h`.
37+
([internal MR 3915](https://gitlab.khronos.org/openxr/openxr/merge_requests/3915),
38+
[internal issue 2222](https://gitlab.khronos.org/openxr/openxr/issues/2222))
39+
- Fix: Consistent usage of `XR_KHR_LOADER_INIT_SUPPORT` defines.
40+
([internal MR 3936](https://gitlab.khronos.org/openxr/openxr/merge_requests/3936))
41+
- Fix: Migrate scripts to publish Android OpenXR loader AAR to Maven Central via
42+
new process.
43+
([internal MR 3978](https://gitlab.khronos.org/openxr/openxr/merge_requests/3978),
44+
[internal issue 2499](https://gitlab.khronos.org/openxr/openxr/issues/2499),
45+
[internal MR 3975](https://gitlab.khronos.org/openxr/openxr/merge_requests/3975))
46+
- Improvement: enable clang-tidy bugprone-unused-local-non-trivial-variable
47+
check.
48+
([internal MR 3892](https://gitlab.khronos.org/openxr/openxr/merge_requests/3892))
49+
- Improvement: Fixed unused parameters in gfxwrapper.
50+
([internal MR 3894](https://gitlab.khronos.org/openxr/openxr/merge_requests/3894))
51+
- Improvement: Provide more useful metadata in the Android OpenXR loader AAR POM
52+
file.
53+
([internal MR 3978](https://gitlab.khronos.org/openxr/openxr/merge_requests/3978),
54+
[internal issue 2499](https://gitlab.khronos.org/openxr/openxr/issues/2499),
55+
[internal MR 3975](https://gitlab.khronos.org/openxr/openxr/merge_requests/3975))
56+
- hello_xr: Fix Vulkan resource destruction bugs of ShaderProgram and Pipeline.
57+
([OpenXR-SDK-Source PR 538](https://github.com/KhronosGroup/OpenXR-SDK-Source/pull/538))
58+
- Registry
59+
- Chore: Reserve extension numbers.
60+
([internal MR 3916](https://gitlab.khronos.org/openxr/openxr/merge_requests/3916),
61+
[internal MR 3956](https://gitlab.khronos.org/openxr/openxr/merge_requests/3956))
62+
- Fix: Missing parent struct for `XrSpatialCapabilityConfigurationAnchorEXT`.
63+
([internal MR 3932](https://gitlab.khronos.org/openxr/openxr/merge_requests/3932))
64+
- Fix: Missing `XR_EXT_dpad_binding` paths for
65+
`/interaction_profiles/facebook/touch_controller_pro` and
66+
`/interaction_profiles/meta/touch_controller_plus`.
67+
([internal MR 3945](https://gitlab.khronos.org/openxr/openxr/merge_requests/3945))
68+
- Fix: incorrect placement of `*` in
69+
`XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING` error description.
70+
([internal MR 3960](https://gitlab.khronos.org/openxr/openxr/merge_requests/3960))
71+
- Fix: Missing `XR_EXT_dpad_binding` paths for
72+
`/interaction_profiles/varjo/xr-4_controller`.
73+
([internal MR 3965](https://gitlab.khronos.org/openxr/openxr/merge_requests/3965))
74+
- Fix: Missing `XR_EXT_dpad_binding`, `XR_EXT_palm_pose`, and
75+
`XR_EXT_hand_interaction` bindings for
76+
`/interaction_profiles/oppo/mr_controller_oppo`.
77+
([internal MR 3966](https://gitlab.khronos.org/openxr/openxr/merge_requests/3966))
78+
2479
## OpenXR SDK 1.1.50 (2025-07-24)
2580

2681
This release features a new loader extension for some specific automation use

changes/sdk/pr.538.gh.OpenXR-SDK-Source.md

Lines changed: 0 additions & 1 deletion
This file was deleted.

maintainer-scripts/build-and-publish-aar-snapshot.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@ touch "${ROOT}/SNAPSHOT"
1414

1515
# Publish AAR using Gradle
1616
cd "${MAINT_SCRIPTS}/publish-aar"
17-
./gradlew publishMavenPublicationToBuildDirRepository publishMavenPublicationToOSSRH-SnapshotsRepository
17+
./gradlew publishMavenPublicationToBuildDirRepository publishMavenPublicationToMavenCentralRepository

maintainer-scripts/publish-aar/build.gradle.kts

Lines changed: 32 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1+
// Copyright 2025 The Khronos Group Inc.
12
// Copyright 2021-2022, Collabora, Ltd.
23
// SPDX-License-Identifier: BSL-1.0
34
plugins {
45
id("maven-publish")
56
signing
6-
id("io.codearte.nexus-staging").version("0.30.0")
7+
id("com.vanniktech.maven.publish.base") version "0.34.0"
78
}
89

910
// These next few lines are just to make the version match the OpenXR release.
@@ -14,7 +15,7 @@ apply(file(File(root, "src/version.gradle")))
1415
version = project.ext["versionOpenXR"].toString() + project.ext["versionQualifier"]
1516

1617
val siteUrl = "https://github.com/KhronosGroup/OpenXR-SDK-Source"
17-
val gitUrl = "scm:git:https://github.com/KhronosGroup/OpenXR-SDK-Source.git"
18+
val gitUrl = "scm:git:git@github.com:KhronosGroup/OpenXR-SDK-Source.git"
1819

1920
signing {
2021
val signingKeyId: String? by project
@@ -35,18 +36,24 @@ publishing {
3536

3637
artifactId = "openxr_loader_for_android"
3738

38-
artifact(loaderAar) {
39-
extension = "aar"
40-
}
39+
artifacts {
40+
artifact(loaderAar) {
41+
extension = "aar"
42+
}
4143

42-
artifact(loaderSourcesJar) {
43-
extension = "jar"
44-
classifier = "sources"
44+
artifact(loaderSourcesJar) {
45+
extension = "jar"
46+
classifier = "sources"
47+
}
4548
}
4649

4750
pom {
4851
name.set("OpenXR Loader for Android")
49-
description.set("The AAR for the OpenXR Loader as used on Android.")
52+
description.set(
53+
"""
54+
|The AAR for the OpenXR Loader as used on Android, along with required global manifest entries.
55+
|You still need to apply changes to the application tag and the activity tag corresponding to your OpenXR experience.""".trimMargin()
56+
)
5057
url.set(siteUrl)
5158
licenses {
5259
license {
@@ -67,7 +74,7 @@ publishing {
6774
}
6875
}
6976
scm {
70-
connection.set(gitUrl)
77+
connection.set("scm:git:${siteUrl}.git")
7178
developerConnection.set(gitUrl)
7279
url.set(siteUrl)
7380
}
@@ -82,27 +89,24 @@ publishing {
8289
name = "BuildDir"
8390
url = uri(layout.buildDirectory.dir("repo"))
8491
}
85-
maven {
86-
name = "OSSRH"
87-
url = uri("https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/")
88-
credentials {
89-
username = System.getenv("OSSRH_USER") ?: return@credentials
90-
password = System.getenv("OSSRH_PASSWORD") ?: return@credentials
91-
}
92-
}
93-
maven {
94-
name = "OSSRH-Snapshots"
95-
url = uri("https://s01.oss.sonatype.org/content/repositories/snapshots/")
96-
credentials {
97-
username = System.getenv("OSSRH_USER") ?: return@credentials
98-
password = System.getenv("OSSRH_PASSWORD") ?: return@credentials
92+
93+
if (version.toString().endsWith("SNAPSHOT")) {
94+
maven {
95+
name = "Snapshots"
96+
url = uri("https://central.sonatype.com/repository/maven-snapshots")
97+
credentials {
98+
99+
val mavenCentralUsername: String? by project
100+
val mavenCentralPassword: String? by project
101+
username = mavenCentralUsername
102+
password = mavenCentralPassword
103+
}
99104
}
100105
}
106+
101107
}
102108
}
103109
}
104-
nexusStaging {
105-
serverUrl = "https://s01.oss.sonatype.org/service/local/"
106-
username = System.getenv("OSSRH_USER") ?: return@nexusStaging
107-
password = System.getenv("OSSRH_PASSWORD") ?: return@nexusStaging
110+
mavenPublishing {
111+
publishToMavenCentral()
108112
}

specification/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ endif
3939
VERSIONS := XR_VERSION_1_0 XR_VERSION_1_1 XR_LOADER_VERSION_1_0
4040
VERSIONOPTIONS := $(foreach version,$(VERSIONS),-feature $(version))
4141

42-
SPECREVISION = 1.1.50
42+
SPECREVISION = 1.1.51
4343
REVISION_COMPONENTS = $(subst ., ,$(SPECREVISION))
4444
MAJORMINORVER = $(word 1,$(REVISION_COMPONENTS)).$(word 2,$(REVISION_COMPONENTS))
4545

specification/registry/xr.xml

Lines changed: 59 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ maintained in the default branch of the Khronos OpenXR GitHub project.
137137
updates them automatically by processing a line at a time.
138138
-->
139139
<type category="define">// OpenXR current version number.
140-
#define <name>XR_CURRENT_API_VERSION</name> <type>XR_MAKE_VERSION</type>(1, 1, 50)</type>
140+
#define <name>XR_CURRENT_API_VERSION</name> <type>XR_MAKE_VERSION</type>(1, 1, 51)</type>
141141

142142
<!--
143143
Defines for a fixed major.minor version of OpenXR preserving the shared patch version.
@@ -4595,7 +4595,7 @@ typedef XrResult (XRAPI_PTR *<name>PFN_xrCreateApiLayerInstance</name>)(
45954595
</type>
45964596

45974597
<!-- XR_EXT_spatial_anchor -->
4598-
<type category="struct" name="XrSpatialCapabilityConfigurationAnchorEXT">
4598+
<type category="struct" name="XrSpatialCapabilityConfigurationAnchorEXT" parentstruct="XrSpatialCapabilityConfigurationBaseHeaderEXT">
45994599
<member values="XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ANCHOR_EXT"><type>XrStructureType</type> <name>type</name></member>
46004600
<member>const <type>void</type>* <name>next</name></member>
46014601
<member><type>XrSpatialCapabilityEXT</type> <name>capability</name></member>
@@ -5558,7 +5558,7 @@ typedef XrResult (XRAPI_PTR *<name>PFN_xrCreateApiLayerInstance</name>)(
55585558
<enum value="-47" name="XR_ERROR_ACTIONSETS_ALREADY_ATTACHED" comment="The session already has attached action sets."/>
55595559
<enum value="-48" name="XR_ERROR_LOCALIZED_NAME_DUPLICATED" comment="The localized name provided was a duplicate of an already-existing resource."/>
55605560
<enum value="-49" name="XR_ERROR_LOCALIZED_NAME_INVALID" comment="The localized name provided was invalid."/>
5561-
<enum value="-50" name="XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING" comment="The fname:xrGetGraphicsRequirements* call was not made before calling fname:xrCreateSession."/>
5561+
<enum value="-50" name="XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING" comment="The ftext:xrGet*GraphicsRequirements call was not made before calling fname:xrCreateSession."/>
55625562
<enum value="-51" name="XR_ERROR_RUNTIME_UNAVAILABLE" comment="The loader was unable to find or load a runtime."/>
55635563
<unused start="-100"/>
55645564
</enums>
@@ -13204,6 +13204,14 @@ typedef XrResult (XRAPI_PTR *<name>PFN_xrCreateApiLayerInstance</name>)(
1320413204
<enum value="&quot;XR_VARJO_xr4_controller_interaction&quot;" name="XR_VARJO_XR4_CONTROLLER_INTERACTION_EXTENSION_NAME"/>
1320513205
<interaction_profile name="/interaction_profiles/varjo/xr-4_controller"/>
1320613206
</require>
13207+
<require depends="XR_EXT_dpad_binding">
13208+
<extend interaction_profile_path="/interaction_profiles/varjo/xr-4_controller">
13209+
<component subpath="/input/thumbstick/dpad_up" type="XR_ACTION_TYPE_BOOLEAN_INPUT"/>
13210+
<component subpath="/input/thumbstick/dpad_down" type="XR_ACTION_TYPE_BOOLEAN_INPUT"/>
13211+
<component subpath="/input/thumbstick/dpad_left" type="XR_ACTION_TYPE_BOOLEAN_INPUT"/>
13212+
<component subpath="/input/thumbstick/dpad_right" type="XR_ACTION_TYPE_BOOLEAN_INPUT"/>
13213+
</extend>
13214+
</require>
1320713215
<require depends="XR_EXT_palm_pose">
1320813216
<extend interaction_profile_path="/interaction_profiles/varjo/xr-4_controller">
1320913217
<component subpath="/input/palm_ext/pose" type="XR_ACTION_TYPE_POSE_INPUT"/>
@@ -13798,6 +13806,14 @@ typedef XrResult (XRAPI_PTR *<name>PFN_xrCreateApiLayerInstance</name>)(
1379813806
<enum value="&quot;XR_FB_touch_controller_pro&quot;" name="XR_FB_TOUCH_CONTROLLER_PRO_EXTENSION_NAME"/>
1379913807
<interaction_profile name="/interaction_profiles/facebook/touch_controller_pro"/>
1380013808
</require>
13809+
<require depends="XR_EXT_dpad_binding">
13810+
<extend interaction_profile_path="/interaction_profiles/facebook/touch_controller_pro">
13811+
<component subpath="/input/thumbstick/dpad_up" type="XR_ACTION_TYPE_BOOLEAN_INPUT"/>
13812+
<component subpath="/input/thumbstick/dpad_down" type="XR_ACTION_TYPE_BOOLEAN_INPUT"/>
13813+
<component subpath="/input/thumbstick/dpad_left" type="XR_ACTION_TYPE_BOOLEAN_INPUT"/>
13814+
<component subpath="/input/thumbstick/dpad_right" type="XR_ACTION_TYPE_BOOLEAN_INPUT"/>
13815+
</extend>
13816+
</require>
1380113817
<require depends="XR_EXT_palm_pose">
1380213818
<extend interaction_profile_path="/interaction_profiles/facebook/touch_controller_pro">
1380313819
<component subpath="/input/palm_ext/pose" type="XR_ACTION_TYPE_POSE_INPUT"/>
@@ -14991,6 +15007,14 @@ typedef XrResult (XRAPI_PTR *<name>PFN_xrCreateApiLayerInstance</name>)(
1499115007
<enum value="&quot;XR_META_touch_controller_plus&quot;" name="XR_META_TOUCH_CONTROLLER_PLUS_EXTENSION_NAME"/>
1499215008
<interaction_profile name="/interaction_profiles/meta/touch_controller_plus"/>
1499315009
</require>
15010+
<require depends="XR_EXT_dpad_binding">
15011+
<extend interaction_profile_path="/interaction_profiles/meta/touch_controller_plus">
15012+
<component subpath="/input/thumbstick/dpad_up" type="XR_ACTION_TYPE_BOOLEAN_INPUT"/>
15013+
<component subpath="/input/thumbstick/dpad_down" type="XR_ACTION_TYPE_BOOLEAN_INPUT"/>
15014+
<component subpath="/input/thumbstick/dpad_left" type="XR_ACTION_TYPE_BOOLEAN_INPUT"/>
15015+
<component subpath="/input/thumbstick/dpad_right" type="XR_ACTION_TYPE_BOOLEAN_INPUT"/>
15016+
</extend>
15017+
</require>
1499415018
<require depends="XR_EXT_palm_pose">
1499515019
<extend interaction_profile_path="/interaction_profiles/meta/touch_controller_plus">
1499615020
<component subpath="/input/palm_ext/pose" type="XR_ACTION_TYPE_POSE_INPUT"/>
@@ -16803,6 +16827,26 @@ typedef XrResult (XRAPI_PTR *<name>PFN_xrCreateApiLayerInstance</name>)(
1680316827
<enum value="&quot;XR_OPPO_controller_interaction&quot;" name="XR_OPPO_CONTROLLER_INTERACTION_EXTENSION_NAME"/>
1680416828
<interaction_profile name="/interaction_profiles/oppo/mr_controller_oppo"/>
1680516829
</require>
16830+
16831+
<require depends="XR_EXT_dpad_binding">
16832+
<extend interaction_profile_path="/interaction_profiles/oppo/mr_controller_oppo">
16833+
<component subpath="/input/thumbstick/dpad_up" type="XR_ACTION_TYPE_BOOLEAN_INPUT"/>
16834+
<component subpath="/input/thumbstick/dpad_down" type="XR_ACTION_TYPE_BOOLEAN_INPUT"/>
16835+
<component subpath="/input/thumbstick/dpad_left" type="XR_ACTION_TYPE_BOOLEAN_INPUT"/>
16836+
<component subpath="/input/thumbstick/dpad_right" type="XR_ACTION_TYPE_BOOLEAN_INPUT"/>
16837+
</extend>
16838+
</require>
16839+
<require depends="XR_EXT_palm_pose">
16840+
<extend interaction_profile_path="/interaction_profiles/oppo/mr_controller_oppo">
16841+
<component subpath="/input/palm_ext/pose" type="XR_ACTION_TYPE_POSE_INPUT"/>
16842+
</extend>
16843+
</require>
16844+
<require depends="XR_EXT_hand_interaction">
16845+
<extend interaction_profile_path="/interaction_profiles/oppo/mr_controller_oppo">
16846+
<component subpath="/input/pinch_ext/pose" type="XR_ACTION_TYPE_POSE_INPUT"/>
16847+
<component subpath="/input/poke_ext/pose" type="XR_ACTION_TYPE_POSE_INPUT"/>
16848+
</extend>
16849+
</require>
1680616850
</extension>
1680716851

1680816852
<extension name="XR_ANDROID_extension_455" number="455" type="instance" supported="disabled">
@@ -20157,7 +20201,19 @@ typedef XrResult (XRAPI_PTR *<name>PFN_xrCreateApiLayerInstance</name>)(
2015720201
</require>
2015820202
</extension>
2015920203

20204+
<extension name="XR_EXT_extension_840" number="840" type="instance" supported="disabled">
20205+
<require>
20206+
<enum value="1" name="XR_EXT_extension_840_SPEC_VERSION"/>
20207+
<enum value="&quot;XR_EXT_extension_840&quot;" name="XR_EXT_EXTENSION_840_EXTENSION_NAME"/>
20208+
</require>
20209+
</extension>
2016020210

20211+
<extension name="XR_KHR_extension_841" number="841" type="instance" supported="disabled">
20212+
<require>
20213+
<enum value="1" name="XR_KHR_extension_841_SPEC_VERSION"/>
20214+
<enum value="&quot;XR_KHR_extension_841&quot;" name="XR_KHR_EXTENSION_841_EXTENSION_NAME"/>
20215+
</require>
20216+
</extension>
2016120217

2016220218
</extensions>
2016320219

specification/scripts/creflectiongenerator.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -169,9 +169,6 @@ def genType(self, typeinfo, name, alias):
169169
def genCmd(self, cmdinfo, name, alias):
170170
OutputGenerator.genCmd(self, cmdinfo, name, alias)
171171

172-
if alias:
173-
return
174-
175172
self.commands.append(CommandData(name, self.featureName))
176173

177174
def genStruct(self, typeinfo, typeName, alias):

src/api_layers/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,3 +332,5 @@ elseif(WIN32)
332332
)
333333
endforeach()
334334
endif()
335+
336+
add_subdirectory(best_practices)

src/api_layers/api_dump.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -441,8 +441,6 @@ XRAPI_ATTR XrResult XRAPI_CALL ApiDumpLayerXrCreateInstance(const XrInstanceCrea
441441
XRAPI_ATTR XrResult XRAPI_CALL ApiDumpLayerXrGetInstanceProcAddr(XrInstance instance, const char *name,
442442
PFN_xrVoidFunction *function) {
443443
try {
444-
std::string func_name = name;
445-
446444
// Generate output for this command
447445
std::vector<std::tuple<std::string, std::string, std::string>> contents;
448446
contents.emplace_back("XrResult", "xrGetInstanceProcAddr", "");

0 commit comments

Comments
 (0)