Skip to content

Instantly share code, notes, and snippets.

@rpavlik
Last active July 31, 2019 14:00
Show Gist options
  • Save rpavlik/5d0e95f30aad32a4d4780e10df5a56ba to your computer and use it in GitHub Desktop.
Save rpavlik/5d0e95f30aad32a4d4780e10df5a56ba to your computer and use it in GitHub Desktop.
Spec and registry diffs between OpenXR 0.90 and 1.0

These are not exactly the released versions: I pre-processed them slightly to reduce diff noise, then ran the spec sources through https://github.com/asciidoctor/asciidoctor-extensions-lab/blob/master/scripts/asciidoc-coalescer.rb to produce a single adoc file for each spec version. I then used git diff --patience on the combined adoc file and the XML registry.

As an obligatory note, these diffs aren't an official product of the working group, and they are not normative.

As diffs of the spec components, they carry the same license as those spec components.

diff --git a/specification/combined.adoc b/specification/combined.adoc
index 082f1f60..1e2af3df 100644
--- a/specification/combined.adoc
+++ b/specification/combined.adoc
@@ -1,7 +1,7 @@
// Copyright (c) 2017-2019 The Khronos Group Inc.
// Copyright notice at https://www.khronos.org/registry/speccopyright.html
-= The OpenXR Specification [PROVISIONAL RELEASE]
+= The OpenXR Specification
Copyright (c) 2017-2019 The Khronos Group Inc.
:data-uri:
:icons: font
@@ -14,7 +14,10 @@ Copyright (c) 2017-2019 The Khronos Group Inc.
:source-highlighter: prettify
Copyright (c) 2017-2019 The Khronos Group Inc.
-All Rights reserved.
+All rights reserved.
+
+// Include attributes for special symbols
+// include::attribs.adoc[]
toc::[]
@@ -240,17 +243,32 @@ runtime.
[[api-version-numbers-and-semantics]]
=== API Version Numbers and Semantics
-The version number is used in several places in the OpenXR API.
+
+[open,refpage='XrVersion',type='basetypes',desc='Type indicating multi-part version packed into 64-bit integer']
+--
+Multi-part version numbers are used in several places in the OpenXR API.
+
+// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
+[[XrVersion,XrVersion]]
+[source,c++]
+----
+typedef uint64_t XrVersion;
+
+----
+
In each such use, the API major version number, minor version number, and
-patch version number are packed into a 32-bit integer as follows:
+patch version number are packed into a 64-bit integer, referred to as
+basetype:XrVersion, as follows:
.Version Numbers
****
-* The major version number is a 10-bit integer packed into bits 31-22.
-* The minor version number is a 10-bit integer packed into bits 21-12.
-* The patch version number is a 12-bit integer packed into bits 11-0.
+* The major version number is a 16-bit integer packed into bits 63-48.
+* The minor version number is a 16-bit integer packed into bits 47-32.
+* The patch version number is a 32-bit integer packed into bits 31-0.
****
+--
+
Differences in any of the version numbers indicate a change to the API, with
each part of the version number indicating a different scope of change, as
follows.
@@ -377,7 +395,7 @@ In the above table, the following identify the various cases in detail:
This API uses strings as input and output for some functions.
Unless otherwise specified, all such strings are code:NULL terminated UTF-8
-encoded character arrays.
+encoded case-sensitive character arrays.
[[threading-behavior]]
=== Threading Behavior
@@ -400,16 +418,32 @@ must: guarantee not only that the functions do not execute simultaneously,
but also that the two functions are separated by an appropriate memory
barrier if needed.
-The following is a complete list of externally synchronized parameters in
-OpenXR:
+For all functions which destroy an object handle, the application must:
+externally synchronize the object handle parameter and any child handles.
+// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Externally Synchronized Parameters
****
-* the pname:instance parameter in flink:xrDestroyInstance,
-* the pname:session parameter in flink:xrDestroySession,
-* the pname:swapchain parameter in flink:xrDestroySwapchain
+* The pname:instance parameter, and any child handles, in flink:xrDestroyInstance
+* The pname:session parameter, and any child handles, in flink:xrDestroySession
+* The pname:space parameter, and any child handles, in flink:xrDestroySpace
+* The pname:swapchain parameter, and any child handles, in flink:xrDestroySwapchain
+* The pname:actionSet parameter, and any child handles, in flink:xrDestroyActionSet
+* The pname:action parameter, and any child handles, in flink:xrDestroyAction
+* The pname:objectHandle member of the pname:nameInfo parameter in flink:xrSetDebugUtilsObjectNameEXT
+* The pname:instance parameter, and any child handles, in flink:xrCreateDebugUtilsMessengerEXT
+* The pname:messenger parameter in flink:xrDestroyDebugUtilsMessengerEXT
****
+// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
+// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
+.Implicit Externally Synchronized Parameters
+****
+* The pname:session parameter by any other flink:xrWaitFrame call in flink:xrWaitFrame
+* The slink:XrInstance used to create pname:messenger, and all of its child handles in flink:xrDestroyDebugUtilsMessengerEXT
+****
+
+
[[multiprocessing-behavior]]
=== Multiprocessing Behavior
@@ -435,7 +469,7 @@ Extensions are optional and therefore must: be enabled by the application
before the extended functionality is made available.
Because extensions are optional, they may: be implemented only on a subset
of runtimes, graphics platforms, or operating systems.
-Therefore, an application must: first query which extensions are available
+Therefore, an application should: first query which extensions are available
before enabling.
The application queries the available list of extensions using the the
@@ -451,16 +485,16 @@ The names have the following format:
****
* The prefix "code:XR_" to identify this as an OpenXR extension
* A string identifier for the vendor tag, which corresponds to the company
-or group exposing the extension.
-The vendor tag must: use only uppercase letters and decimal digits.
-Some examples include:
+ or group exposing the extension.
+ The vendor tag must: use only uppercase letters and decimal digits.
+ Some examples include:
** "code:KHR" for Khronos extensions, supported by multiple vendors.
** "code:EXT" for non-Khronos extensions supported by multiple vendors.
* An underscore "code:_".
* A string uniquely identifying the extension.
-The string is a compound of substrings which must: use only lower case
-letters and decimal digits.
-The substrings are delimited with single underscores.
+ The string is a compound of substrings which must: use only lower case
+ letters and decimal digits.
+ The substrings are delimited with single underscores.
****
For example: `<<XR_KHR_composition_layer_cube>>` is an OpenXR extension
@@ -535,10 +569,10 @@ XR_APILAYER_ACME_check_best_practices
==== Activating API Layers
===== Application Activation
-Applications may: determine the API layers that are available to them by
+Applications can: determine the API layers that are available to them by
calling the flink:xrEnumerateApiLayerProperties function to obtain a list of
available API layers.
-Applications then may: select the desired API layers from this list and
+Applications then can: select the desired API layers from this list and
provide them to the flink:xrCreateInstance function when creating an
instance.
@@ -550,7 +584,7 @@ These platform-dependent steps may: include the installation of API
layer-related files, setting environment variables, or other
platform-specific operations.
The options that are available for configuring the API layers in this manner
-are also dependent on the platform.
+are also dependent on the platform and/or runtime.
==== API Layer Extensions
API layers may: implement OpenXR functions that may or may not be supported
@@ -590,8 +624,8 @@ Without this, otherwise undefined behavior may occur.
This compiler feature is typically referred to as "strict aliasing," and it
can usually be enabled or disabled via compiler options.
The OpenXR specification does not support strict aliasing, as there are some
-cases in which an application may: need to provide a struct with a type that
-differs from the declared type.
+cases in which an application intentionally provides a struct with a type
+that differs from the declared type.
For example, slink:XrFrameEndInfo::pname:layers is an array of type
code:const slink:XrCompositionLayerBaseHeader code:* code:const.
However, the array must: be of one of the specific layer types, such as
@@ -647,9 +681,6 @@ It is possible to validate these conditions against the API's minimum or
maximum supported values for these limits and features, or some subset of
other known values.
-Valid usage conditions do not cover conditions where well-defined behavior
-(including returning an error code) exists.
-
Valid usage conditions should: apply to a function or structure where
complete information about the condition would be known during execution of
an application.
@@ -706,7 +737,7 @@ enumerated type in question.
[[valid-usage-for-flags]]
===== Valid Usage for Flags
-[open,refpage='XrFlags64',desc='OpenXR bitmasks',type='basetypes',xrefs='XrInstanceCreateFlags XrSessionCreateFlags XrSwapchainCreateFlags XrSwapchainUsageFlags XrViewStateFlags XrCompositionLayerFlags XrSpaceRelationFlags']
+[open,refpage='XrFlags64',desc='OpenXR bitmasks',type='basetypes',xrefs='XrInstanceCreateFlags XrSessionCreateFlags XrSwapchainCreateFlags XrSwapchainUsageFlags XrViewStateFlags XrCompositionLayerFlags XrSpaceLocationFlags']
--
A collection of flags is represented by a bitmask using the type
basetype:XrFlags64:
@@ -759,29 +790,27 @@ The only exceptions to this rule are API and Operating System names which
are converted in a way that produces a more readable value:
.Structure Type Format Exceptions
-***
+****
* OpenGL => _OPENGL
* OpenGLES => _OPENGL_ES
* D3D => _D3D
-* VULKAN => _VULKAN ***
+* VULKAN => _VULKAN
+****
[[valid-usage-for-structure-pointer-chains]]
===== Valid Usage for Structure Pointer Chains
Any structure containing a code:void* pname:next member must: have a value
-of pname:next that is either code:NULL, or points to a valid structure
-defined by an extension.
-The extension structure must: contain pname:type and pname:next member
-values for that specific structure as described in the extension's
-documentation.
+of pname:next that is either code:NULL, or points to a valid structure that
+also contains pname:type and pname:next member values.
The set of structures connected by pname:next pointers is referred to as a
pname:next chain.
-In order to insert an extension structure into a pname:next chain, the
-proper extension must: have been previously enabled during
+In order to use a structure type defined by an extension in a pname:next
+chain, the proper extension must: have been previously enabled during
flink:xrCreateInstance.
-If the appropriate extension has not been enabled, then the structure must:
-be ignored.
+A runtime must: ignore all unrecognized structures in a pname:next chain,
+including those associated with an extension that has not been enabled.
Most extension structures are described in the base OpenXR Specification
under the
@@ -853,9 +882,10 @@ structure pointer chain that returns data back to the application.
These structures allow for some type safety and can be used by OpenXR API
functions that operate on generic inputs and outputs.
+[[next-chain-structure-uniqueness]]
====== Next Chain Structure Uniqueness
-Applications must: ensure that they create and insert no more than one
+Applications should: ensure that they create and insert no more than one
occurrence of each type of extension structure in a given pname:next chain.
Other components of OpenXR (such as the OpenXR loader or an API Layer) may:
insert duplicate structures into this chain.
@@ -914,21 +944,18 @@ All run time error codes are negative values.
typedef enum XrResult {
XR_SUCCESS = 0,
XR_TIMEOUT_EXPIRED = 1,
- XR_SESSION_VISIBILITY_UNAVAILABLE = 2,
XR_SESSION_LOSS_PENDING = 3,
XR_EVENT_UNAVAILABLE = 4,
- XR_STATE_UNAVAILABLE = 5,
- XR_STATE_TYPE_UNAVAILABLE = 6,
XR_SPACE_BOUNDS_UNAVAILABLE = 7,
XR_SESSION_NOT_FOCUSED = 8,
XR_FRAME_DISCARDED = 9,
XR_ERROR_VALIDATION_FAILURE = -1,
XR_ERROR_RUNTIME_FAILURE = -2,
XR_ERROR_OUT_OF_MEMORY = -3,
- XR_ERROR_RUNTIME_VERSION_INCOMPATIBLE = -4,
- XR_ERROR_DRIVER_INCOMPATIBLE = -5,
+ XR_ERROR_API_VERSION_UNSUPPORTED = -4,
XR_ERROR_INITIALIZATION_FAILED = -6,
XR_ERROR_FUNCTION_UNSUPPORTED = -7,
+ XR_ERROR_FEATURE_UNSUPPORTED = -8,
XR_ERROR_EXTENSION_NOT_PRESENT = -9,
XR_ERROR_LIMIT_REACHED = -10,
XR_ERROR_SIZE_INSUFFICIENT = -11,
@@ -941,11 +968,15 @@ typedef enum XrResult {
XR_ERROR_PATH_INVALID = -19,
XR_ERROR_PATH_COUNT_EXCEEDED = -20,
XR_ERROR_PATH_FORMAT_INVALID = -21,
- XR_ERROR_LAYER_INVALID = -22,
- XR_ERROR_LAYER_LIMIT_EXCEEDED = -23,
+ XR_ERROR_PATH_UNSUPPORTED = -22,
+ XR_ERROR_LAYER_INVALID = -23,
+ XR_ERROR_LAYER_LIMIT_EXCEEDED = -24,
XR_ERROR_SWAPCHAIN_RECT_INVALID = -25,
XR_ERROR_SWAPCHAIN_FORMAT_UNSUPPORTED = -26,
XR_ERROR_ACTION_TYPE_MISMATCH = -27,
+ XR_ERROR_SESSION_NOT_READY = -28,
+ XR_ERROR_SESSION_NOT_STOPPING = -29,
+ XR_ERROR_TIME_INVALID = -30,
XR_ERROR_REFERENCE_SPACE_UNSUPPORTED = -31,
XR_ERROR_FILE_ACCESS_ERROR = -32,
XR_ERROR_FILE_CONTENTS_INVALID = -33,
@@ -958,12 +989,14 @@ typedef enum XrResult {
XR_ERROR_INDEX_OUT_OF_RANGE = -40,
XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED = -41,
XR_ERROR_ENVIRONMENT_BLEND_MODE_UNSUPPORTED = -42,
- XR_ERROR_BINDINGS_DUPLICATED = -43,
XR_ERROR_NAME_DUPLICATED = -44,
XR_ERROR_NAME_INVALID = -45,
+ XR_ERROR_ACTIONSET_NOT_ATTACHED = -46,
+ XR_ERROR_ACTIONSETS_ALREADY_ATTACHED = -47,
+ XR_ERROR_LOCALIZED_NAME_DUPLICATED = -48,
+ XR_ERROR_LOCALIZED_NAME_INVALID = -49,
XR_ERROR_ANDROID_THREAD_SETTINGS_ID_INVALID_KHR = -1000003000,
XR_ERROR_ANDROID_THREAD_SETTINGS_FAILURE_KHR = -1000003001,
- XR_ERROR_DEBUG_UTILS_MESSENGER_INVALID_EXT = -1000019000,
XR_RESULT_MAX_ENUM = 0x7FFFFFFF
} XrResult;
----
@@ -987,6 +1020,9 @@ below:
[[fundamentals-successcodes]]
==== Success Codes
+// Generated from comment attributes in XML
+// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
+
[cols=",",options="header",]
|=======================================================================
|Enum |Description
@@ -994,16 +1030,10 @@ below:
|Function successfully completed.
|ename:XR_TIMEOUT_EXPIRED
|The specified timeout time occurred before the operation could complete.
-|ename:XR_SESSION_VISIBILITY_UNAVAILABLE
-|The session has started but cannot be made visible at the moment.
|ename:XR_SESSION_LOSS_PENDING
|The session will be lost soon.
|ename:XR_EVENT_UNAVAILABLE
|No event was available.
-|ename:XR_STATE_UNAVAILABLE
-|No state (of any type) is available for the provided handle.
-|ename:XR_STATE_TYPE_UNAVAILABLE
-|The state of the given type is not available for the provided handle.
|ename:XR_SPACE_BOUNDS_UNAVAILABLE
|The space's bounds are not known at the moment.
|ename:XR_SESSION_NOT_FOCUSED
@@ -1016,6 +1046,9 @@ below:
[[fundamentals-errorcodes]]
==== Error Codes
+// Generated from comment attributes in XML
+// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
+
[cols=",",options="header",]
|=======================================================================
|Enum |Description
@@ -1025,14 +1058,14 @@ below:
|The runtime failed to handle the function in an unexpected way that is not covered by another error result.
|ename:XR_ERROR_OUT_OF_MEMORY
|A memory allocation has failed.
-|ename:XR_ERROR_RUNTIME_VERSION_INCOMPATIBLE
-|The runtime version is incompatible with the requested or required version.
-|ename:XR_ERROR_DRIVER_INCOMPATIBLE
-|The driver is incompatible with the runtime.
+|ename:XR_ERROR_API_VERSION_UNSUPPORTED
+|The runtime does not support the requested API version.
|ename:XR_ERROR_INITIALIZATION_FAILED
|Initialization of object could not be completed.
|ename:XR_ERROR_FUNCTION_UNSUPPORTED
|The requested function was not found or is otherwise unsupported.
+|ename:XR_ERROR_FEATURE_UNSUPPORTED
+|The requested feature is not supported.
|ename:XR_ERROR_EXTENSION_NOT_PRESENT
|A requested extension is not supported.
|ename:XR_ERROR_LIMIT_REACHED
@@ -1040,13 +1073,13 @@ below:
|ename:XR_ERROR_SIZE_INSUFFICIENT
|The supplied size was smaller than required.
|ename:XR_ERROR_HANDLE_INVALID
-|The supplied object handle was invalid.
+|A supplied object handle was invalid.
|ename:XR_ERROR_INSTANCE_LOST
|The slink:XrInstance was lost or could not be found. It will need to be destroyed and optionally recreated.
|ename:XR_ERROR_SESSION_RUNNING
-|This session is already running.
+|The session <<session_running, is already running>>.
|ename:XR_ERROR_SESSION_NOT_RUNNING
-|The operation requires this session to be in the running state.
+|The session <<session_not_running, is not yet running>>.
|ename:XR_ERROR_SESSION_LOST
|The slink:XrSession was lost. It will need to be destroyed and optionally recreated.
|ename:XR_ERROR_SYSTEM_INVALID
@@ -1057,6 +1090,8 @@ below:
|The maximum number of supported semantic paths has been reached.
|ename:XR_ERROR_PATH_FORMAT_INVALID
|The semantic path character format is invalid.
+|ename:XR_ERROR_PATH_UNSUPPORTED
+|The semantic path is unsupported.
|ename:XR_ERROR_LAYER_INVALID
|The layer was NULL or otherwise invalid.
|ename:XR_ERROR_LAYER_LIMIT_EXCEEDED
@@ -1067,6 +1102,12 @@ below:
|The image format is not supported by the runtime or platform.
|ename:XR_ERROR_ACTION_TYPE_MISMATCH
|The API used to retrieve an action's state does not match the action's type.
+|ename:XR_ERROR_SESSION_NOT_READY
+|The session is not in the ready state.
+|ename:XR_ERROR_SESSION_NOT_STOPPING
+|The session is not in the stopping state.
+|ename:XR_ERROR_TIME_INVALID
+|The provided XrTime was zero, negative, or out of range.
|ename:XR_ERROR_REFERENCE_SPACE_UNSUPPORTED
|The specified reference space is not supported by the runtime or system.
|ename:XR_ERROR_FILE_ACCESS_ERROR
@@ -1091,12 +1132,22 @@ below:
|The specified view configuration type is not supported by the runtime or platform.
|ename:XR_ERROR_ENVIRONMENT_BLEND_MODE_UNSUPPORTED
|The specified environment blend mode is not supported by the runtime or platform.
-|ename:XR_ERROR_BINDINGS_DUPLICATED
-|The application specified bindings for an input form factor it had already suggested bindings for.
|ename:XR_ERROR_NAME_DUPLICATED
|The name provided was a duplicate of an already-existing resource.
|ename:XR_ERROR_NAME_INVALID
|The name provided was invalid.
+|ename:XR_ERROR_ACTIONSET_NOT_ATTACHED
+|A referenced action set is not attached to the session.
+|ename:XR_ERROR_ACTIONSETS_ALREADY_ATTACHED
+|The session already has attached action sets.
+|ename:XR_ERROR_LOCALIZED_NAME_DUPLICATED
+|The localized name provided was a duplicate of an already-existing resource.
+|ename:XR_ERROR_LOCALIZED_NAME_INVALID
+|The localized name provided was invalid.
+|ename:XR_ERROR_ANDROID_THREAD_SETTINGS_ID_INVALID_KHR
+|xrSetAndroidApplicationThreadKHR failed as thread id is invalid. (Added by the `<<XR_KHR_android_thread_settings>>` extension)
+|ename:XR_ERROR_ANDROID_THREAD_SETTINGS_FAILURE_KHR
+|xrSetAndroidApplicationThreadKHR failed setting the thread attributes/priority. (Added by the `<<XR_KHR_android_thread_settings>>` extension)
|=======================================================================
==== Convenience Macros
@@ -1148,9 +1199,8 @@ used to compare an elink:XrResult to code:0 (ename:XR_SUCCESS) exclusively.
Except as noted below or in individual API specifications, valid API usage
may: be required by the runtime.
-Invalid API usage may: result in undefined behavior.
-Runtimes may: choose to validate some API usage and return an
-etext:XR_ERROR_*_INVALID error code.
+Runtimes may: choose to validate some API usage and return an appropriate
+error code.
Application developers should: use validation layers to catch and eliminate
errors during development.
@@ -1195,8 +1245,10 @@ parent handle is destroyed.
Applications may: destroy handles explicitly before the parent handle is
destroyed, and should: do so if no longer needed, in order to conserve
resources.
-Runtimes are not required to detect invalid handles.
-Usage of an invalid handle may: result in undefined behavior.
+Runtimes may: detect dlink:XR_NULL_HANDLE and other invalid handles passed
+where a valid handle is required and return ename:XR_ERROR_HANDLE_INVALID.
+However, runtimes are not required to do so unless otherwise specified, and
+so use of any invalid handle may: result in undefined behavior.
When a function has an optional handle parameter, dlink:XR_NULL_HANDLE must:
be used unless passing a valid handle.
@@ -1205,7 +1257,7 @@ ename:XR_ERROR_HANDLE_INVALID.
Handles form a hierarchy in which child handles fall under the validity and
lifetime of parent handles.
-To create an slink:XrSwapchain handle, applications must call
+For example, to create an slink:XrSwapchain handle, applications must call
flink:xrCreateSwapchain and pass an slink:XrSession handle.
Thus slink:XrSwapchain is a child handle to slink:XrSession.
@@ -1273,22 +1325,37 @@ relationships:
[[buffer-size-parameters]]
=== Buffer Size Parameters
-Functions with input/output buffer parameters look like the following
-example, with the element type being float in this case:
+Functions with input/output buffer parameters take on either parameter form
+or struct form, looking like one of the following examples, with the element
+type being code:float in this case:
+Parameter form:
[source,listing,tilde]
----
XrResult xrFunction(uint32_t elementCapacityInput, uint32_t* elementCountOutput, float* elements);
----
-A two-call idiom may: be employed, first calling fname:xrFunction with a
-valid pname:elementCountOutput pointer, but passing code:NULL as
-pname:elements and code:0 as pname:elementCapacityInput, to retrieve the
-required buffer size as number of elements (number of floats in this
-example).
-After allocating a buffer at least as large, as the value pointed to by
-pname:elementCountOutput, a pointer to the allocated buffer should: be
-passed as pname:elements, along with the buffer's length in the variable
+Struct form:
+[source,listing,tilde]
+----
+XrResult xrFunction(XrBuffer* buffer);
+
+struct XrBuffer {
+ uint32_t elementCapacityInput;
+ uint32_t elementCountOutput;
+ float* elements;
+};
+----
+
+A two-call idiom may: be employed, first calling fname:xrFunction (with a
+valid pname:elementCountOutput pointer if in parameter form), but passing
+code:NULL as pname:elements and code:0 as pname:elementCapacityInput, to
+retrieve the required buffer size as number of elements (number of floats in
+this example).
+After allocating a buffer at least as large as pname:elementCountOutput (in
+a struct) or the value pointed to by pname:elementCountOutput (as
+parameters), a pointer to the allocated buffer should: be passed as
+pname:elements, along with the buffer's length in
pname:elementCapacityInput, to a second call to fname:xrFunction to perform
the retrieval of the data.
In case that pname:elements is a struct with pname:type and pname:next
@@ -1296,6 +1363,10 @@ fields, the application must: set the pname:type to the correct value as
well as pname:next either to code:NULL or a struct with extension related
data in which pname:type and pname:next also need to be well defined.
+In the following discussion, "set pname:elementCountOutput" should be
+interpreted as "set the value pointed to by pname:elementCountOutput" in
+parameter form and "set the value of pname:elementCountOutput" in struct
+form.
These functions have the below-listed behavior with respect to the buffer
size parameters:
@@ -1307,40 +1378,46 @@ size parameters:
the buffer to be written, or code:0 to indicate a request for the required
buffer size.
* Independent of pname:elementCapacityInput or pname:elements parameters,
- pname:elementCountOutput must: be a valid pointer, and the function sets
- pname:elementCountOutput.
+ the function sets pname:elementCountOutput.
+ pname:elementCountOutput must: be a valid pointer if the function uses
+ parameter form.
* Where the pname:elementCapacityInput is code:0, the function sets
pname:elementCountOutput to the required size in number of elements and
- returns ename:XR_SUCCESS.
+ must: return ename:XR_SUCCESS.
pname:elements is ignored.
-* The value returned in pname:elementCountOutput is not guaranteed to be
- constant during the lifetime of the application.
* Where the pname:elementCapacityInput is non-zero but less than required,
- the function sets elementCountOutput to the required capacity, and returns
- ename:XR_ERROR_SIZE_INSUFFICIENT.
+ the function sets pname:elementCountOutput to the required capacity, and
+ must: return ename:XR_ERROR_SIZE_INSUFFICIENT.
The data in pname:elements is undefined.
* Where the pname:elementCapacityInput is non-zero and the function returned
- successfully, the pname:elementCountOutput contains the count of the
- elements that have been written to pname:elements.
-* Upon a failure for reasons unrelated to the element array capacity,
- pname:elementCountOutput is code:0 and the contents of pname:elements are
- undefined.
-* pname:elementCountOutput can: be code:NULL for cases in which
- pname:elementCapacityInput is greater than 0, in which case it is unused
- by the function.
- However, ename:XR_ERROR_SIZE_INSUFFICIENT may: still be returned by the
- function in the case that pname:elementCapacityInput is too small.
+ successfully, the function sets pname:elementCountOutput to the count of
+ the elements that have been written to pname:elements.
+* Upon a failure for reasons unrelated to the element array capacity, the
+ contents of pname:elementCountOutput and pname:elements are undefined.
* In the case that the element array refers to a string (is of type
code:char*), pname:elementCapacityInput and pname:elementCountOutput refer
to the string code:strlen plus code:1 for a code:NULL terminator.
****
+Some functions fill multiple buffers in one call.
+For these functions, the pname:elementCapacityInput,
+pname:elementCountOutput and pname:elements parameters or fields are
+repeated, once per buffer, with different prefixes.
+In that case, the semantics above still apply, with the additional behavior
+that if any pname:elementCapacityInput parameter or field is set to 0 by the
+application, the runtime must: treat all pname:elementCapacityInput values
+as if they were set to 0.
+If any pname:elementCapacityInput value is too small to fit all elements of
+the buffer, ename:XR_ERROR_SIZE_INSUFFICIENT must: be returned, and the data
+in all buffers is undefined.
+
[[time]]
=== Time
Time is represented by a 64-bit signed integer representing nanoseconds
(basetype:XrTime).
-The passage of time is monotonic and not realtime (i.e., wall clock time).
+The passage of time must: be monotonic and not real-time (i.e. wall clock
+time).
Thus the time is always increasing at a constant rate and is unaffected by
clock changes, time zones, daylight savings, etc.
@@ -1356,16 +1433,14 @@ typedef int64_t XrTime;
----
-basetype:XrTime is a base value type to represent time, as a 64 bit integer.
-Unless specified otherwise, basetype:XrTime denotes a time-point relative to
-some runtime-determined constant epoch, rather than a duration, or a
-time-point with some moving epoch such as function call time, vsync time,
-etc.
+basetype:XrTime is a base value type that represents time as a signed 64-bit
+integer, representing the monotonically-increasing count of nanoseconds that
+have elapsed since a runtime-chosen epoch.
+basetype:XrTime always represents the time elasped since that constant
+epoch, rather than a duration or a time point relative to some moving epoch
+such as vsync time, etc.
+Durations are instead represented by basetype:XrDuration.
-Time may: be represented by the runtime with a standardized epoch (e.g.
-12:00:00 January 1, 1970 as of runtime start), or an arbitrary epoch may: be
-used (e.g. time since runtime start).
-Time overflows after 2^64^ nanoseconds have occurred since the epoch.
A single runtime must: use the same epoch for all simultaneous applications.
Time must: be represented the same regardless of multiple processors or
threads present in the system.
@@ -1377,6 +1452,34 @@ A runtime may:, for example, report time progression with only
microsecond-level granularity.
Time must: not be assumed to correspond to a system clock time.
+
+Unless specified otherwise, zero or a negative value is not a valid
+basetype:XrTime, and related functions must: return error
+ename:XR_ERROR_TIME_INVALID.
+Applications must: not initialize such basetype:XrTime fields to a zero
+value.
+Instead, applications should: always assign basetype:XrTime fields to the
+meaningful point in time they are choosing to reason about, such as a
+frame's predicted display time, or an action's last change time.
+
+The behavior of a runtime is undefined when time overflows beyond the
+maximum positive value that can be represented by an basetype:XrTime.
+Runtimes should: choose an epoch that minimizes the chance of overflow.
+Runtimes should: also choose an epoch that minimizes the chance of underflow
+below 0 for applications performing a reasonable amount of historical pose
+lookback.
+For example, if the runtime chooses an epoch relative to its startup time,
+it should: push the epoch into the past by enough time to avoid applications
+performing reasonable pose lookback from reaching a negative basetype:XrTime
+value.
+
+An application cannot assume that the system's clock and the runtime's clock
+will maintain a constant relationship across frames and should: avoid
+storing such an offset, as this may cause time drift.
+Applications should: instead always use time interop functions to convert a
+relevant time point across the system's clock and the runtime's clock using
+extensions, for example, <<XR_KHR_win32_convert_performance_counter_time>>
+or <<XR_KHR_convert_timespec_time>>.
--
[[duration]]
@@ -1614,6 +1717,10 @@ typedef struct XrPosef {
A construct representing a position and orientation within a space, with
position expressed in meters, and orientation represented as a unit
quaternion.
+
+A runtime must: return ename:XR_ERROR_POSE_INVALID if the pname:orientation
+norm deviates by more than 1% from unit length.
+
--
[[common-object-types]]
@@ -1701,6 +1808,8 @@ typedef struct XrExtent2Df {
This structure is used for component values that may be fractional
(floating-point).
If used to represent physical distances, values must: be in meters.
+
+The pname:width and pname:height value must: be non-negative.
--
[open,refpage='XrExtent2Di',desc='Extent in two dimensions',type='structs',xrefs='XrOffset2Di XrRect2Di']
@@ -1726,6 +1835,8 @@ typedef struct XrExtent2Di {
This variant is for representing discrete values such as texels.
For representing physical distances, the floating-point variant must: be
used instead.
+
+The pname:width and pname:height value must: be non-negative.
--
Rectangles are used to describe a specific rectangular region in two
@@ -1827,7 +1938,13 @@ For a symmetric FoV, pname:angleRight and pname:angleUp will have positive
values, pname:angleLeft will be -pname:angleRight, and pname:angleDown will
be -pname:angleUp.
-The angles must: be specified in radians.
+The angles must: be specified in radians, and must: be between [eq]#-{pi}/2#
+and [eq]#{pi}/2# exclusively.
+
+When pname:angleLeft > pname:angleRight, the content of the view must: be
+flipped horizontally.
+When pname:angleDown > pname:angleUp, the content of the view must: be
+flipped vertically.
--
[[prediction-time-limits]]
@@ -1955,11 +2072,6 @@ pname:eventData.
* pname:eventData is a pointer to a valid slink:XrEventDataBuffer.
****
-.Valid Usage
-****
-* pname:eventData must be a pointer to a valid slink:XrEventDataBuffer.
-****
-
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
@@ -1980,6 +2092,9 @@ pname:eventData.
****
+The runtime must: discard queued events which contain destroyed or otherwise
+invalid handles.
+
.Event Descriptions
[cols=",",options="header",]
|=======================================================================
@@ -2000,14 +2115,14 @@ pname:eventData.
[open,refpage='XrEventDataBaseHeader',desc='Base header for an event',type='structs',xrefs='xrPollEvent']
--
-The slink:XrEventDataBaseHeader is defined as:
+The slink:XrEventDataBaseHeader structure is defined as:
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[XrEventDataBaseHeader,XrEventDataBaseHeader]]
[source,c++]
----
typedef struct XrEventDataBaseHeader {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
+ XrStructureType type;
+ const void* next;
} XrEventDataBaseHeader;
----
@@ -2027,8 +2142,8 @@ a pointer of the appropriate event data based on the pname:type parameter.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
-* [[VUID-XrEventDataBaseHeader-type-type]] pname:type must: be one of the following XrStructureType values: ename:XR_TYPE_EVENT_DATA_EVENTS_LOST, ename:XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING, ename:XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED, ename:XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING, ename:XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED, ename:XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR, ename:XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT
-* [[VUID-XrEventDataBaseHeader-next-next]] pname:next must: be code:NULL
+* [[VUID-XrEventDataBaseHeader-type-type]] pname:type must: be one of the following XrStructureType values: ename:XR_TYPE_EVENT_DATA_EVENTS_LOST, ename:XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING, ename:XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED, ename:XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT, ename:XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING, ename:XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED, ename:XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR
+* [[VUID-XrEventDataBaseHeader-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
@@ -2051,9 +2166,9 @@ event data based on the pname:type parameter.
[source,c++]
----
typedef struct XrEventDataBuffer {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- uint8_t varying[4000];
+ XrStructureType type;
+ const void* next;
+ uint8_t varying[4000];
} XrEventDataBuffer;
----
@@ -2069,8 +2184,7 @@ typedef struct XrEventDataBuffer {
.Valid Usage (Implicit)
****
* [[VUID-XrEventDataBuffer-type-type]] pname:type must: be ename:XR_TYPE_EVENT_DATA_BUFFER
-* [[VUID-XrEventDataBuffer-next-next]] pname:next must: be code:NULL
-* [[VUID-XrEventDataBuffer-varying-parameter]] Any given element of pname:varying must: be a valid code:uint8_t value
+* [[VUID-XrEventDataBuffer-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
@@ -2096,15 +2210,15 @@ slink:XrEventDataBuffer.
[open,refpage='XrEventDataEventsLost',desc='Event indicating events were lost',type='structs',xrefs='xrPollEvent XrEventDataBaseHeader']
--
-The slink:XrEventDataEventsLost is defined as:
+The slink:XrEventDataEventsLost structure is defined as:
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[XrEventDataEventsLost,XrEventDataEventsLost]]
[source,c++]
----
typedef struct XrEventDataEventsLost {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- uint32_t lostEventCount;
+ XrStructureType type;
+ const void* next;
+ uint32_t lostEventCount;
} XrEventDataEventsLost;
----
@@ -2124,8 +2238,7 @@ the queue at which this event was found.
.Valid Usage (Implicit)
****
* [[VUID-XrEventDataEventsLost-type-type]] pname:type must: be ename:XR_TYPE_EVENT_DATA_EVENTS_LOST
-* [[VUID-XrEventDataEventsLost-next-next]] pname:next must: be code:NULL
-* [[VUID-XrEventDataEventsLost-lostEventCount-parameter]] pname:lostEventCount must: be a valid code:uint32_t value
+* [[VUID-XrEventDataEventsLost-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
@@ -2207,12 +2320,16 @@ parameter is one of the following strings:
* flink:xrCreateInstance
****
-flink:xrGetInstanceProcAddr returns ename:XR_ERROR_HANDLE_INVALID if
-pname:instance is code:NULL and pname:name is not one of the above strings.
+flink:xrGetInstanceProcAddr must: return ename:XR_ERROR_HANDLE_INVALID if
+pname:name is not one of the above strings and pname:instance is
+dlink:XR_NULL_HANDLE.
+flink:xrGetInstanceProcAddr may: return ename:XR_ERROR_HANDLE_INVALID if
+pname:name is not one of the above strings and pname:instance is invalid but
+not dlink:XR_NULL_HANDLE.
-flink:xrGetInstanceProcAddr returns ename:XR_ERROR_FUNCTION_UNSUPPORTED if
-pname:instance is a valid instance and the string specified in pname:name is
-not the name of an OpenXR core or enabled extension function.
+flink:xrGetInstanceProcAddr must: return ename:XR_ERROR_FUNCTION_UNSUPPORTED
+if pname:instance is a valid instance and the string specified in pname:name
+is not the name of an OpenXR core or enabled extension function.
If pname:name is the name of an extension function, then the result returned
by flink:xrGetInstanceProcAddr will depend upon how the pname:instance was
@@ -2251,9 +2368,8 @@ pointer`") for each case.
|====
1::
- The returned function pointer must: only be called with a dispatchable
- object (the first parameter) that is pname:instance or a child of
- pname:instance.
+ The returned function pointer must: only be called with a handle (the
+ first parameter) that is pname:instance or a child of pname:instance.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
@@ -2405,8 +2521,7 @@ some of them become unavailable for future instances.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
-* [[VUID-xrEnumerateApiLayerProperties-propertyCapacityInput-parameter]] If pname:propertyCapacityInput is not `0`, pname:propertyCapacityInput must: be a valid code:uint32_t value
-* [[VUID-xrEnumerateApiLayerProperties-propertyCountOutput-parameter]] If pname:propertyCountOutput is not code:NULL, pname:propertyCountOutput must: be a pointer to a code:uint32_t value
+* [[VUID-xrEnumerateApiLayerProperties-propertyCountOutput-parameter]] pname:propertyCountOutput must: be a pointer to a code:uint32_t value
* [[VUID-xrEnumerateApiLayerProperties-properties-parameter]] If pname:propertyCapacityInput is not `0`, pname:properties must: be a pointer to an array of pname:propertyCapacityInput slink:XrApiLayerProperties structures
****
@@ -2432,12 +2547,12 @@ The slink:XrApiLayerProperties structure is defined as:
[source,c++]
----
typedef struct XrApiLayerProperties {
- XrStructureType type;
- void* XR_MAY_ALIAS next;
- char layerName[XR_MAX_API_LAYER_NAME_SIZE];
- uint32_t specVersion;
- uint32_t implementationVersion;
- char description[XR_MAX_API_LAYER_DESCRIPTION_SIZE];
+ XrStructureType type;
+ void* next;
+ char layerName[XR_MAX_API_LAYER_NAME_SIZE];
+ XrVersion specVersion;
+ uint32_t layerVersion;
+ char description[XR_MAX_API_LAYER_DESCRIPTION_SIZE];
} XrApiLayerProperties;
----
@@ -2452,7 +2567,7 @@ typedef struct XrApiLayerProperties {
* pname:specVersion is the API version the API layer was written to, encoded
as described in the <<api-version-numbers-and-semantics,API Version
Numbers and Semantics>> section.
-* pname:implementationVersion is the version of this API layer.
+* pname:layerVersion is the version of this API layer.
It is an integer, increasing with backward compatible changes.
* pname:description is a string providing additional details that can: be
used by the application to identify the API layer.
@@ -2462,7 +2577,7 @@ typedef struct XrApiLayerProperties {
.Valid Usage (Implicit)
****
* [[VUID-XrApiLayerProperties-type-type]] pname:type must: be ename:XR_TYPE_API_LAYER_PROPERTIES
-* [[VUID-XrApiLayerProperties-next-next]] pname:next must: be code:NULL
+* [[VUID-XrApiLayerProperties-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
@@ -2517,13 +2632,13 @@ XrResult xrEnumerateInstanceExtensionProperties(
* pname:layerName is either code:NULL or a pointer to a string naming the
API layer to retrieve extensions from, as returned by
flink:xrEnumerateApiLayerProperties.
-* pname:propertyCapacityInput is the capacity of the properties array, or 0
- to indicate a request to retrieve the required capacity.
+* pname:propertyCapacityInput is the capacity of the properties array, or
+ `0` to indicate a request to retrieve the required capacity.
* pname:propertyCountOutput is a pointer to the count of properties written,
or a pointer to the required capacity in the case that
- pname:propertyCapacityInput is 0.
+ pname:propertyCapacityInput is `0`.
* pname:properties is a pointer to an array of slink:XrExtensionProperties
- structures, but can: be code:NULL if pname:propertyCapacityInput is 0.
+ structures, but can: be code:NULL if pname:propertyCapacityInput is `0`.
* See the <<buffer-size-parameters, Buffer Size Parameters>> section for a
detailed description of retrieving the required pname:properties size.
****
@@ -2535,11 +2650,12 @@ to the number of elements in the pname:properties array.
If pname:propertyCountInput is less than the number of extension properties
available, the contents of pname:properties will be undefined.
If pname:propertyCountInput is smaller than the number of extensions
-available, the failure code ename:XR_ERROR_SIZE_INSUFFICIENT and the
-contents of pname:properties are undefined.
+available, the runtime must: return the failure code
+ename:XR_ERROR_SIZE_INSUFFICIENT and the contents of pname:properties are
+undefined.
Because the list of available layers may change externally between calls to
-flink:xrEnumerateInstanceExtensionProperties, two calls may retrieve
+flink:xrEnumerateInstanceExtensionProperties, two calls may: retrieve
different results if a pname:layerName is available in one call but not in
another.
The extensions supported by a layer may also change between two calls, e.g.
@@ -2550,8 +2666,7 @@ calls.
.Valid Usage (Implicit)
****
* [[VUID-xrEnumerateInstanceExtensionProperties-layerName-parameter]] If pname:layerName is not code:NULL, pname:layerName must: be a null-terminated UTF-8 string
-* [[VUID-xrEnumerateInstanceExtensionProperties-propertyCapacityInput-parameter]] If pname:propertyCapacityInput is not `0`, pname:propertyCapacityInput must: be a valid code:uint32_t value
-* [[VUID-xrEnumerateInstanceExtensionProperties-propertyCountOutput-parameter]] If pname:propertyCountOutput is not code:NULL, pname:propertyCountOutput must: be a pointer to a code:uint32_t value
+* [[VUID-xrEnumerateInstanceExtensionProperties-propertyCountOutput-parameter]] pname:propertyCountOutput must: be a pointer to a code:uint32_t value
* [[VUID-xrEnumerateInstanceExtensionProperties-properties-parameter]] If pname:propertyCapacityInput is not `0`, pname:properties must: be a pointer to an array of pname:propertyCapacityInput slink:XrExtensionProperties structures
****
@@ -2578,10 +2693,10 @@ The slink:XrExtensionProperties structure is defined as:
[source,c++]
----
typedef struct XrExtensionProperties {
- XrStructureType type;
- void* XR_MAY_ALIAS next;
- char extensionName[XR_MAX_EXTENSION_NAME_SIZE];
- uint32_t specVersion;
+ XrStructureType type;
+ void* next;
+ char extensionName[XR_MAX_EXTENSION_NAME_SIZE];
+ uint32_t extensionVersion;
} XrExtensionProperties;
----
@@ -2590,16 +2705,16 @@ typedef struct XrExtensionProperties {
* pname:type is the elink:XrStructureType of this structure.
* pname:next is code:NULL or a pointer to an extension-specific structure.
* pname:extensionName is a code:NULL terminated string specifying the name
-of the extension.
-* pname:specVersion is the version of this extension.
-It is an integer, incremented with backward compatible changes.
+ of the extension.
+* pname:extensionVersion is the version of this extension.
+ It is an integer, incremented with backward compatible changes.
****
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
* [[VUID-XrExtensionProperties-type-type]] pname:type must: be ename:XR_TYPE_EXTENSION_PROPERTIES
-* [[VUID-XrExtensionProperties-next-next]] pname:next must: be code:NULL
+* [[VUID-XrExtensionProperties-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
@@ -2622,9 +2737,9 @@ XrResult xrCreateInstance(
.Parameter Descriptions
****
* pname:createInfo points to an instance of slink:XrInstanceCreateInfo
-controlling creation of the instance.
+ controlling creation of the instance.
* pname:instance points to an slink:XrInstance handle in which the resulting
-instance is returned.
+ instance is returned.
****
flink:xrCreateInstance creates the slink:XrInstance, then enables and
@@ -2633,21 +2748,25 @@ If an extension is provided by an API layer, both the API layer and
extension must: be specified at flink:xrCreateInstance time.
If a specified API layer cannot be found, no slink:XrInstance will be
created and the function will return ename:XR_ERROR_API_LAYER_NOT_PRESENT.
-Likewise, if a specified extension cannot be found the call will return
+Likewise, if a specified extension cannot be found, the call must: return
ename:XR_ERROR_EXTENSION_NOT_PRESENT and no slink:XrInstance will be
created.
-Additionally, some runtimes may limit the number of concurrent instances
+Additionally, some runtimes may: limit the number of concurrent instances
that may be in use.
If the application attempts to create more instances than a runtime can
-simultaneously support, flink:xrCreateInstance will return
+simultaneously support, flink:xrCreateInstance may: return
ename:XR_ERROR_LIMIT_REACHED.
-If the slink:XrInstanceCreateInfo struct contains a platform-specific
+If the slink:XrApplicationInfo::pname:applicationName is the empty string
+the runtime must: return ename:XR_ERROR_NAME_INVALID.
+
+If the slink:XrInstanceCreateInfo structure contains a platform-specific
extension for a platform other than the target platform,
-ename:XR_ERROR_INITIALIZATION_FAILED will be returned.
-The same is true if a mandatory platform-specific extension is defined for
-the target platform but no matching extension struct is provided in
-slink:XrInstanceCreateInfo.
+ename:XR_ERROR_INITIALIZATION_FAILED may: be returned.
+If a mandatory platform-specific extension is defined for the target
+platform but no matching extension struct is provided in
+slink:XrInstanceCreateInfo the runtime must: return
+ename:XR_ERROR_INITIALIZATION_FAILED.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
@@ -2666,11 +2785,11 @@ slink:XrInstanceCreateInfo.
* ename:XR_ERROR_INSTANCE_LOST
* ename:XR_ERROR_RUNTIME_FAILURE
* ename:XR_ERROR_INITIALIZATION_FAILED
-* ename:XR_ERROR_RUNTIME_VERSION_INCOMPATIBLE
+* ename:XR_ERROR_API_VERSION_UNSUPPORTED
* ename:XR_ERROR_API_LAYER_NOT_PRESENT
* ename:XR_ERROR_EXTENSION_NOT_PRESENT
-* ename:XR_ERROR_DRIVER_INCOMPATIBLE
* ename:XR_ERROR_VALIDATION_FAILURE
+* ename:XR_ERROR_NAME_INVALID
****
--
@@ -2684,14 +2803,14 @@ The slink:XrInstanceCreateInfo structure is defined as:
[source,c++]
----
typedef struct XrInstanceCreateInfo {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- XrInstanceCreateFlags createFlags;
- XrApplicationInfo applicationInfo;
- uint32_t enabledApiLayerCount;
- const char* const* enabledApiLayerNames;
- uint32_t enabledExtensionCount;
- const char* const* enabledExtensionNames;
+ XrStructureType type;
+ const void* next;
+ XrInstanceCreateFlags createFlags;
+ XrApplicationInfo applicationInfo;
+ uint32_t enabledApiLayerCount;
+ const char* const* enabledApiLayerNames;
+ uint32_t enabledExtensionCount;
+ const char* const* enabledExtensionNames;
} XrInstanceCreateInfo;
----
@@ -2702,32 +2821,29 @@ typedef struct XrInstanceCreateInfo {
* pname:createFlags is a bitmask of elink:XrInstanceCreateFlags that
identifies options that apply to the creation.
* pname:applicationInfo is an instance of slink:XrApplicationInfo.
-This information helps runtimes recognize behavior inherent to classes of
-applications.
-slink:XrApplicationInfo is defined in detail below.
+ This information helps runtimes recognize behavior inherent to classes of
+ applications.
+ slink:XrApplicationInfo is defined in detail below.
* pname:enabledApiLayerCount is the number of global API layers to enable.
* pname:enabledApiLayerNames is a pointer to an array of
-pname:enabledApiLayerCount strings containing the names of API layers to
-enable for the created instance.
-See the <<api-layers-and-extensions,API Layers And Extensions>> section for
-further details.
+ pname:enabledApiLayerCount strings containing the names of API layers to
+ enable for the created instance.
+ See the <<api-layers-and-extensions,API Layers And Extensions>> section
+ for further details.
* pname:enabledExtensionCount is the number of global extensions to enable.
* pname:enabledExtensionNames is a pointer to an array of
-pname:enabledExtensionCount strings containing the names of extensions to
-enable.
+ pname:enabledExtensionCount strings containing the names of extensions to
+ enable.
****
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
* [[VUID-XrInstanceCreateInfo-type-type]] pname:type must: be ename:XR_TYPE_INSTANCE_CREATE_INFO
-* [[VUID-XrInstanceCreateInfo-next-next]] Each pname:next member of any structure (including this one) in the pname:next chain must: be either code:NULL or a pointer to a valid instance of slink:XrDebugUtilsMessengerCreateInfoEXT or slink:XrInstanceCreateInfoAndroidKHR
-* [[VUID-XrInstanceCreateInfo-next-unique]] Each pname:type member in the pname:next chain must: be unique
-* [[VUID-XrInstanceCreateInfo-createFlags-parameter]] pname:createFlags must: be 0 or a valid combination of elink:XrInstanceCreateFlagBits values
+* [[VUID-XrInstanceCreateInfo-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>. See also: slink:XrDebugUtilsMessengerCreateInfoEXT, slink:XrInstanceCreateInfoAndroidKHR
+* [[VUID-XrInstanceCreateInfo-createFlags-parameter]] pname:createFlags must: be `0` or a valid combination of elink:XrInstanceCreateFlagBits values
* [[VUID-XrInstanceCreateInfo-applicationInfo-parameter]] pname:applicationInfo must: be a valid slink:XrApplicationInfo structure
-* [[VUID-XrInstanceCreateInfo-enabledApiLayerCount-parameter]] If pname:enabledApiLayerCount is not `0`, pname:enabledApiLayerCount must: be a valid code:uint32_t value
* [[VUID-XrInstanceCreateInfo-enabledApiLayerNames-parameter]] If pname:enabledApiLayerCount is not `0`, pname:enabledApiLayerNames must: be a pointer to an array of pname:enabledApiLayerCount null-terminated UTF-8 strings
-* [[VUID-XrInstanceCreateInfo-enabledExtensionCount-parameter]] If pname:enabledExtensionCount is not `0`, pname:enabledExtensionCount must: be a valid code:uint32_t value
* [[VUID-XrInstanceCreateInfo-enabledExtensionNames-parameter]] If pname:enabledExtensionCount is not `0`, pname:enabledExtensionNames must: be a pointer to an array of pname:enabledExtensionCount null-terminated UTF-8 strings
****
@@ -2759,44 +2875,41 @@ The slink:XrApplicationInfo structure is defined as:
[source,c++]
----
typedef struct XrApplicationInfo {
- char applicationName[XR_MAX_APPLICATION_NAME_SIZE];
- uint32_t applicationVersion;
- char engineName[XR_MAX_ENGINE_NAME_SIZE];
- uint32_t engineVersion;
- uint32_t apiVersion;
+ char applicationName[XR_MAX_APPLICATION_NAME_SIZE];
+ uint32_t applicationVersion;
+ char engineName[XR_MAX_ENGINE_NAME_SIZE];
+ uint32_t engineVersion;
+ XrVersion apiVersion;
} XrApplicationInfo;
----
.Member Descriptions
****
-* pname:applicationName is a string containing the name of the application.
+* pname:applicationName is a non-empty string containing the name of the
+ application.
* pname:applicationVersion is an unsigned integer variable containing the
developer-supplied version number of the application.
* pname:engineName is a string containing the name of the engine (if any)
-used to create the application.
-May be empty to indicate no specified engine.
+ used to create the application.
+ It may be empty to indicate no specified engine.
* pname:engineVersion is an unsigned integer variable containing the
-developer-supplied version number of the engine used to create the
-application.
-May be zero to indicate no specified engine.
+ developer-supplied version number of the engine used to create the
+ application.
+ May be zero to indicate no specified engine.
* pname:apiVersion is the version of this API against which the application
-will run, encoded as described in the
-<<api-version-numbers-and-semantics,API Version Numbers and Semantics>>
-section.
-If the runtime does not support the requested pname:apiVersion it must:
-return ename:XR_ERROR_DRIVER_INCOMPATIBLE.
-pname:apiVersion must be zero, or otherwise it must be a version that the
-runtime supports, or supports an effective substitute for.
+ will run, encoded as described in the
+ <<api-version-numbers-and-semantics,API Version Numbers and Semantics>>
+ section.
+ If the runtime does not support the requested pname:apiVersion it must:
+ return ename:XR_ERROR_API_VERSION_UNSUPPORTED.
****
+
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
-* [[VUID-XrApplicationInfo-applicationName-parameter]] pname:applicationName must: be a null-terminated UTF-8 string whose length is less than or equal to XR_MAX_APPLICATION_NAME_SIZE
-* [[VUID-XrApplicationInfo-applicationVersion-parameter]] pname:applicationVersion must: be a valid code:uint32_t value
-* [[VUID-XrApplicationInfo-engineName-parameter]] pname:engineName must: be a null-terminated UTF-8 string whose length is less than or equal to XR_MAX_ENGINE_NAME_SIZE
-* [[VUID-XrApplicationInfo-engineVersion-parameter]] pname:engineVersion must: be a valid code:uint32_t value
-* [[VUID-XrApplicationInfo-apiVersion-parameter]] pname:apiVersion must: be a valid code:uint32_t value
+* [[VUID-XrApplicationInfo-applicationName-parameter]] pname:applicationName must: be a null-terminated UTF-8 string whose length is less than or equal to ename:XR_MAX_APPLICATION_NAME_SIZE
+* [[VUID-XrApplicationInfo-engineName-parameter]] pname:engineName must: be a null-terminated UTF-8 string whose length is less than or equal to ename:XR_MAX_ENGINE_NAME_SIZE
****
--
@@ -2823,8 +2936,6 @@ The flink:xrDestroyInstance function is used to destroy an slink:XrInstance.
slink:XrInstance handles are destroyed using flink:xrDestroyInstance.
When an slink:XrInstance is destroyed, all handles that are children of that
slink:XrInstance are also destroyed.
-If the pname:instance is invalid the runtime must return
-ename:XR_ERROR_HANDLE_INVALID.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
@@ -2832,14 +2943,17 @@ ename:XR_ERROR_HANDLE_INVALID.
* [[VUID-xrDestroyInstance-instance-parameter]] pname:instance must: be a valid slink:XrInstance handle
****
+.Thread Safety
+****
+* Access to pname:instance, and any child handles, must: be externally synchronized
+****
+
.Return Codes
****
<<fundamentals-successcodes,Success>>::
* ename:XR_SUCCESS
<<fundamentals-errorcodes,Failure>>::
* ename:XR_ERROR_HANDLE_INVALID
-* ename:XR_ERROR_VALIDATION_FAILURE
-* ename:XR_ERROR_RUNTIME_FAILURE
****
--
@@ -2902,10 +3016,10 @@ The slink:XrInstanceProperties structure is defined as:
[source,c++]
----
typedef struct XrInstanceProperties {
- XrStructureType type;
- void* XR_MAY_ALIAS next;
- uint32_t runtimeVersion;
- char runtimeName[XR_MAX_RUNTIME_NAME_SIZE];
+ XrStructureType type;
+ void* next;
+ XrVersion runtimeVersion;
+ char runtimeName[XR_MAX_RUNTIME_NAME_SIZE];
} XrInstanceProperties;
----
@@ -2913,8 +3027,8 @@ typedef struct XrInstanceProperties {
****
* pname:type is the elink:XrStructureType of this structure.
* pname:next is code:NULL or a pointer to an extension-specific structure.
-* pname:runtimeVersion is the current version of the runtime in the format
- of dlink:XR_MAKE_VERSION.
+* pname:runtimeVersion is the runtime's version (not necessarily related to
+ an OpenXR API version), expressed in the format of dlink:XR_MAKE_VERSION.
* pname:runtimeName is the name of the runtime.
****
@@ -2922,7 +3036,7 @@ typedef struct XrInstanceProperties {
.Valid Usage (Implicit)
****
* [[VUID-XrInstanceProperties-type-type]] pname:type must: be ename:XR_TYPE_INSTANCE_PROPERTIES
-* [[VUID-XrInstanceProperties-next-next]] pname:next must: be code:NULL
+* [[VUID-XrInstanceProperties-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
@@ -2957,8 +3071,8 @@ the runtime is otherwise no longer available, or if the runtime encounters
an error during any function execution which prevents it from being able to
support further function execution.
Once ename:XR_ERROR_INSTANCE_LOST is first returned, it must: henceforth be
-returned by all functions that involve an slink:XrInstance or child handle
-type until the instance is destroyed.
+returned by all non-destroy functions that involve an slink:XrInstance or
+child handle type until the instance is destroyed.
Applications must: destroy the slink:XrInstance.
Applications may: then attempt to continue by recreating all relevant OpenXR
objects, starting with a new slink:XrInstance.
@@ -2975,9 +3089,9 @@ instance loss is detected.
[source,c++]
----
typedef struct XrEventDataInstanceLossPending {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- XrTime lossTime;
+ XrStructureType type;
+ const void* next;
+ XrTime lossTime;
} XrEventDataInstanceLossPending;
----
@@ -3011,7 +3125,7 @@ passed in.
.Valid Usage (Implicit)
****
* [[VUID-XrEventDataInstanceLossPending-type-type]] pname:type must: be ename:XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING
-* [[VUID-XrEventDataInstanceLossPending-next-next]] pname:next must: be code:NULL
+* [[VUID-XrEventDataInstanceLossPending-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
@@ -3039,8 +3153,7 @@ XrResult xrResultToString(
.Parameter Descriptions
****
-* pname:instance is the handle of the instance to ask for the string or
- dlink:XR_NULL_HANDLE to ask the loader for the string.
+* pname:instance is the handle of the instance to ask for the string.
* pname:value is the elink:XrResult value to turn into a string.
* pname:buffer is the buffer that will be used to return the string in.
****
@@ -3054,7 +3167,7 @@ In all cases the returned string must: be one of:
****
* The literal string defined for the provide numeric value in the core spec
or extension.
- (e.g. the value 0 results in the string ename:XR_SUCCESS)
+ (e.g. the value 0 results in the string `XR_SUCCESS`)
* `XR_UNKNOWN_SUCCESS_` concatenated with the positive result number
expressed as a decimal number.
* `XR_UNKNOWN_FAILURE_` concatenated with the negative result number
@@ -3065,8 +3178,8 @@ In all cases the returned string must: be one of:
.Valid Usage (Implicit)
****
* [[VUID-xrResultToString-instance-parameter]] pname:instance must: be a valid slink:XrInstance handle
-* [[VUID-xrResultToString-value-parameter]] pname:value must: be a valid slink:XrResult value
-* [[VUID-xrResultToString-buffer-parameter]] pname:buffer must: be a null-terminated UTF-8 string whose length is less than or equal to XR_MAX_RESULT_STRING_SIZE
+* [[VUID-xrResultToString-value-parameter]] pname:value must: be a valid elink:XrResult value
+* [[VUID-xrResultToString-buffer-parameter]] pname:buffer must: be a character array of length ename:XR_MAX_RESULT_STRING_SIZE
****
.Return Codes
@@ -3084,7 +3197,7 @@ In all cases the returned string must: be one of:
[open,refpage='xrStructureTypeToString',desc='Converts an XrStructureType to a UTF-8 string',type='protos',xrefs='xrResultToString']
--
-The flink:xrStructureTypeToString function is defined as follows:
+The flink:xrStructureTypeToString function is defined as:
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[xrStructureTypeToString,xrStructureTypeToString]]
@@ -3098,7 +3211,7 @@ XrResult xrStructureTypeToString(
.Parameter Descriptions
****
-* pname:instance is the handle of the instance to ask for the string
+* pname:instance is the handle of the instance to ask for the string.
* pname:value is the elink:XrStructureType value to turn into a string.
* pname:buffer is the buffer that will be used to return the string in.
****
@@ -3122,8 +3235,8 @@ In all cases the returned string must: be one of:
.Valid Usage (Implicit)
****
* [[VUID-xrStructureTypeToString-instance-parameter]] pname:instance must: be a valid slink:XrInstance handle
-* [[VUID-xrStructureTypeToString-value-parameter]] pname:value must: be a valid slink:XrStructureType value
-* [[VUID-xrStructureTypeToString-buffer-parameter]] pname:buffer must: be a null-terminated UTF-8 string whose length is less than or equal to XR_MAX_STRUCTURE_NAME_SIZE
+* [[VUID-xrStructureTypeToString-value-parameter]] pname:value must: be a valid elink:XrStructureType value
+* [[VUID-xrStructureTypeToString-buffer-parameter]] pname:buffer must: be a character array of length ename:XR_MAX_STRUCTURE_NAME_SIZE
****
.Return Codes
@@ -3265,9 +3378,10 @@ XrResult xrGetSystem(
.Parameter Descriptions
****
-* pname:instance is the handle of the instance to get the information from.
-* pname:getInfo is a pointer to an slink:XrSystemGetInfo containing the
- application's requests for a system.
+* pname:instance is the handle of the instance from which to get the
+ information.
+* pname:getInfo is a pointer to an slink:XrSystemGetInfo structure
+ containing the application's requests for a system.
* pname:systemId is the returned basetype:XrSystemId.
****
@@ -3277,8 +3391,8 @@ runtime's basetype:XrSystemId associated with that configuration.
If the form factor is supported but temporarily unavailable,
flink:xrGetSystem must: return ename:XR_ERROR_FORM_FACTOR_UNAVAILABLE.
-A runtime may: return success on a subsequent call for a form factor it
-previously returned ename:XR_ERROR_FORM_FACTOR_UNAVAILABLE.
+A runtime may: return ename:XR_SUCCESS on a subsequent call for a form
+factor it previously returned ename:XR_ERROR_FORM_FACTOR_UNAVAILABLE.
For example, connecting or warming up hardware might cause an unavailable
form factor to become available.
@@ -3314,9 +3428,9 @@ The slink:XrSystemGetInfo structure is defined as:
[source,c++]
----
typedef struct XrSystemGetInfo {
- XrStructureType type;
- void* XR_MAY_ALIAS next;
- XrFormFactor formFactor;
+ XrStructureType type;
+ const void* next;
+ XrFormFactor formFactor;
} XrSystemGetInfo;
----
@@ -3334,8 +3448,8 @@ desired by an application.
.Valid Usage (Implicit)
****
* [[VUID-XrSystemGetInfo-type-type]] pname:type must: be ename:XR_TYPE_SYSTEM_GET_INFO
-* [[VUID-XrSystemGetInfo-next-next]] pname:next must: be code:NULL
-* [[VUID-XrSystemGetInfo-formFactor-parameter]] pname:formFactor must: be a valid slink:XrFormFactor value
+* [[VUID-XrSystemGetInfo-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrSystemGetInfo-formFactor-parameter]] pname:formFactor must: be a valid elink:XrFormFactor value
****
--
@@ -3427,7 +3541,7 @@ The slink:XrSystemProperties structure is defined as:
----
typedef struct XrSystemProperties {
XrStructureType type;
- void* XR_MAY_ALIAS next;
+ void* next;
XrSystemId systemId;
uint32_t vendorId;
char systemName[XR_MAX_SYSTEM_NAME_SIZE];
@@ -3443,9 +3557,9 @@ typedef struct XrSystemProperties {
* pname:vendorId is a unique identifier for the vendor of the system.
* pname:systemId is the basetype:XrSystemId identifying the system.
* pname:systemName is a string containing the name of the system.
-* pname:graphicsProperties is an slink:XrSystemGraphicsProperties struct
+* pname:graphicsProperties is an slink:XrSystemGraphicsProperties structure
specifying the system graphics properties.
-* pname:trackingProperties is an slink:XrSystemTrackingProperties struct
+* pname:trackingProperties is an slink:XrSystemTrackingProperties structure
specifying system tracking properties.
****
@@ -3453,7 +3567,7 @@ typedef struct XrSystemProperties {
.Valid Usage (Implicit)
****
* [[VUID-XrSystemProperties-type-type]] pname:type must: be ename:XR_TYPE_SYSTEM_PROPERTIES
-* [[VUID-XrSystemProperties-next-next]] pname:next must: be code:NULL
+* [[VUID-XrSystemProperties-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
@@ -3469,7 +3583,6 @@ The slink:XrSystemGraphicsProperties structure is defined as:
typedef struct XrSystemGraphicsProperties {
uint32_t maxSwapchainImageHeight;
uint32_t maxSwapchainImageWidth;
- uint32_t maxViewCount;
uint32_t maxLayerCount;
} XrSystemGraphicsProperties;
----
@@ -3480,21 +3593,13 @@ typedef struct XrSystemGraphicsProperties {
supported by this system.
* pname:maxSwapchainImageWidth is the maximum swapchain image pixel width
supported by this system.
-* pname:maxViewCount is maximum number of views possibly required by
- flink:xrLocateViews.
* pname:maxLayerCount is the maximum number of composition layers supported
by this system.
+ The runtime must: support at least
+ ename:XR_MIN_COMPOSITION_LAYERS_SUPPORTED layers.
****
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
-.Valid Usage (Implicit)
-****
-* [[VUID-XrSystemGraphicsProperties-maxSwapchainImageHeight-parameter]] pname:maxSwapchainImageHeight must: be a valid code:uint32_t value
-* [[VUID-XrSystemGraphicsProperties-maxSwapchainImageWidth-parameter]] pname:maxSwapchainImageWidth must: be a valid code:uint32_t value
-* [[VUID-XrSystemGraphicsProperties-maxViewCount-parameter]] pname:maxViewCount must: be a valid code:uint32_t value
-* [[VUID-XrSystemGraphicsProperties-maxLayerCount-parameter]] pname:maxLayerCount must: be a valid code:uint32_t value
-****
-
--
[open,refpage='XrSystemTrackingProperties',desc='Tracking-related properties of a particular system',type='structs',xrefs='XrSystemId xrGetSystem xrGetSystemProperties XrSystemProperties XrSystemGraphicsProperties']
@@ -3553,7 +3658,8 @@ Formally, the runtime maintains an instance-specific bijective mapping
between well-formed path name strings and valid basetype:XrPath
(code:uint64_t) values.
These basetype:XrPath values are only valid within a single
-slink:XrInstance, and must: not be shared between instances.
+slink:XrInstance, and applications must: not share these values between
+instances.
Applications must: instead use the string representation of a path in their
code and configuration, and obtain the correct corresponding basetype:XrPath
at runtime in each slink:XrInstance.
@@ -3703,6 +3809,7 @@ A well-formed path name string must: conform to the following rules:
** Period: .
** Forward Slash: /
* Path name strings must: start with a single forward slash character.
+* Path name strings must: not end with a forward slash character.
* Path name strings must: not contain two or more adjacent forward slash
characters.
* Path name strings must: not contain two forward slash characters that are
@@ -3831,15 +3938,14 @@ During the lifetime of the given slink:XrInstance, the path name string
retrieved by this function for a given valid basetype:XrPath will not
change.
For invalid paths, including dlink:XR_NULL_PATH, ename:XR_ERROR_PATH_INVALID
-will be returned.
+must: be returned.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
* [[VUID-xrPathToString-instance-parameter]] pname:instance must: be a valid slink:XrInstance handle
-* [[VUID-xrPathToString-bufferCapacityInput-parameter]] If pname:bufferCapacityInput is not `0`, pname:bufferCapacityInput must: be a valid code:uint32_t value
-* [[VUID-xrPathToString-bufferCountOutput-parameter]] If pname:bufferCountOutput is not code:NULL, pname:bufferCountOutput must: be a pointer to a code:uint32_t value
+* [[VUID-xrPathToString-bufferCountOutput-parameter]] pname:bufferCountOutput must: be a pointer to a code:uint32_t value
* [[VUID-xrPathToString-buffer-parameter]] If pname:bufferCapacityInput is not `0`, pname:buffer must: be a pointer to an array of pname:bufferCapacityInput char values
****
@@ -3860,7 +3966,7 @@ will be returned.
[[semantic-path-reserved]]
-=== Reserved Paths for Devices
+=== Reserved Paths
In order for some uses of semantic paths to work consistently across
runtimes, it is necessary to standardize several paths and require each
@@ -3872,7 +3978,7 @@ Those paths are as follows.
[[semantic-path-user]]
==== /user paths
-Some paths are used to refer to devices that are filling semantic roles in
+Some paths are used to refer to entities that are filling semantic roles in
the system.
These paths are all under the pathname:/user subtree.
@@ -3895,9 +4001,9 @@ The reserved user paths are:
device.
****
-Runtimes are not required to provide devices at all of these paths.
+Runtimes are not required to provide interaction at all of these paths.
For instance, in a system with no hand tracking, only pathname:/user/head
-would be provided a device.
+would be active for interaction.
In a system with only one controller, the runtime may: provide access to
that controller via either pathname:/user/hand/left or
pathname:/user/hand/right as it deems appropriate.
@@ -3910,7 +4016,7 @@ must: determine which two are accessible as pathname:/user/hand/left and
pathname:/user/hand/right.
[[semantic-path-input]]
-==== Device input subpaths
+==== Input subpaths
Devices on the source side of the input system need to define paths for each
component that can be bound to an action.
@@ -3921,11 +4027,15 @@ the pattern specified below.
Each input source path must: match the following pattern:
-* subpathname:/input/<identifier>[_<location>]/<component>
+* subpathname:/input/<identifier>[_<location>][/<component>]
Identifiers are often the label on the component or related to the type and
location of the component.
+When specifying a suggested binding there are several cases where the
+component part of the path can be determined automatically.
+See <<input-suggested-bindings, Suggested Bindings>> for more details.
+
See <<semantic-path-interaction-profiles, Interaction Profiles>> for
examples of input subpaths.
@@ -3974,7 +4084,7 @@ examples of input subpaths.
thumb.
* shoulder - A button that is usually pressed with the index finger and is
often positioned above a trigger.
-* grip - An input source that indicates that the user is squeezing their
+* squeeze - An input source that indicates that the user is squeezing their
fist closed.
This could be a simple button or act more like a trigger.
Sources with this identifier should: either follow button or trigger
@@ -3987,28 +4097,44 @@ identifiers.
Standard pose identifiers for tracked hands or motion controllers as
represented by pathname:/user/hand/left and pathname:/user/hand/right are:
-* palm - A pose that allows applications to reliably render a virtual object
-in the user's hand regardless of how a hand is tracked.
-The palm pose is defined as follows:
-** The palm position: The palm centroid when closing the fist.
-For handheld motion controllers, this position is adjusted left or right to
-center the position within the controller's grip.
-** The palm orientation's +X axis: When you completely open your hand to
- form a flat 5-finger pose, the ray that is normal to your palm (forward
- from left palm, backward from right palm)
-** The palm orientation's -Z axis: When you close your hand partially (as if
+* grip - A pose that allows applications to reliably render a virtual object
+held in the user's hand, whether it is tracked directly or by a motion
+controller.
+The grip pose is defined as follows:
+** The grip position:
+*** For tracked hands: The user's palm centroid when closing the fist, at
+ the surface of the palm.
+*** For handheld motion controllers: A fixed position within the controller
+ that generally lines up with the palm centroid when held by a hand in a
+ neutral position.
+ This position should be adjusted left or right to center the position
+ within the controller's grip.
+** The grip orientation's +X axis: When you completely open your hand to
+ form a flat 5-finger pose, the ray that is normal to the user's palm
+ (forward from left palm, backward from right palm).
+** The grip orientation's -Z axis: When you close your hand partially (as if
holding the controller), the ray that points "forward" through the tube
formed by your non-thumb fingers.
-** The palm orientation's +Y axis: The Up axis implied by the +X (Right) and
- -Z (Forward) definitions.
-* pointer - A pose positioned at the start of a motion controller's natural
- pointing ray, with +Y up, +X to the right, and -Z forward.
- This pose is most useful for applications that are rendering a model
- matching the physical controller, as an application rendering a virtual
- object in the user's hand likely prefers to point based on the geometry of
- that virtual object.
- The pointer ray chosen will be runtime-dependent, although this will often
- emerge from the frontmost tip of a motion controller.
+** The grip orientation's +Y axis: The right-handed Up axis implied by the
+ +X (Right) and -Z (Forward) definitions.
+* aim - A pose that allows applications to point in the world using the
+ input source, according to the platform's conventions for aiming with that
+ kind of source.
+ The aim pose is defined as follows:
+** For tracked hands: The ray that follows platform conventions for how the
+ user aims at objects in the world with their entire hand, with +Y up, +X
+ to the right, and -Z forward.
+ The ray chosen will be runtime-dependent, for example, a ray emerging
+ from the palm parallel to the forearm.
+** For handheld motion controllers: The ray that follows platform
+ conventions for how the user targets objects in the world with the motion
+ controller, with +Y up, +X to the right, and -Z forward.
+ This is usually for applications that are rendering a model matching the
+ physical controller, as an application rendering a virtual object in the
+ user's hand likely prefers to point based on the geometry of that virtual
+ object.
+ The ray chosen will be runtime-dependent, although this will often emerge
+ from the frontmost tip of a motion controller.
===== Standard locations
@@ -4024,6 +4150,8 @@ Standard locations are:
* left_lower
* right_upper
* right_lower
+* upper
+* lower
===== Standard components
@@ -4046,21 +4174,22 @@ Standard components are:
* value - A 1D scalar value that varies from 0 to 1, with 0 being the rest
state.
This is present for triggers, throttles, and pedals.
- It may: also be present for grips or other components.
-* x, y, z - 2D or 3D scalar values that vary from -1 to 1.
- These represent the 2D or 3D position of the input source with 0 being the
- rest state on each axis.
+ It may: also be present for squeeze or other components.
+* x, y - scalar components of 2D values.
+ These vary in value from -1 to 1.
+ These represent the 2D position of the input source with 0 being the rest
+ state on each axis.
x and y components are present for trackpads, thumbsticks, and joysticks.
* twist - Some sources, such as flight sticks, have a sensor that allows the
user to twist the input left or right.
For this component -1 means all the way left and 1 means all the way
right.
* pose - The orientation and/or position of this input source.
- This component may: exist for dedicated pose identifiers like palm and
- pointer, or may: be defined on other identifiers such as trackpad to let
+ This component may: exist for dedicated pose identifiers like grip and
+ aim, or may: be defined on other identifiers such as trackpad to let
applications reason about the surface of that part.
-===== Output source paths
+===== Output paths
Many devices also have subpaths for output features such as haptics.
The runtime must: ignore output component paths that do not follow the
@@ -4129,13 +4258,13 @@ There is no hardware associated with the profile, and runtimes which support
this profile should: map the input paths provided to whatever the
appropriate paths are on the actual hardware.
-Supported input sources:
+Supported component paths:
* subpathname:/input/select/click
* subpathname:/input/menu/click
+* subpathname:/input/grip/pose
+* subpathname:/input/aim/pose
* subpathname:/output/haptic
-* subpathname:/input/pointer/pose
-* subpathname:/input/palm/pose
==== Google Daydream Controller Profile
@@ -4146,18 +4275,18 @@ Valid for user paths:
* pathname:/user/hand/left
* pathname:/user/hand/right
-This interaction profile represents the input sources and haptics on the
-Google Daydream Controller.
+This interaction profile represents the input sources on the Google Daydream
+Controller.
-Supported input sources:
+Supported component paths:
* subpathname:/input/select/click
* subpathname:/input/trackpad/x
* subpathname:/input/trackpad/y
* subpathname:/input/trackpad/click
* subpathname:/input/trackpad/touch
-* subpathname:/input/palm/pose
-* subpathname:/input/pointer/pose
+* subpathname:/input/grip/pose
+* subpathname:/input/aim/pose
==== HTC Vive Controller Profile
@@ -4172,11 +4301,11 @@ Valid for user paths:
This interaction profile represents the input sources and haptics on the
Vive Controller.
-Supported input sources:
+Supported component paths:
* subpathname:/input/system/click (may: not be available for application
use)
-* subpathname:/input/grip/click
+* subpathname:/input/squeeze/click
* subpathname:/input/menu/click
* subpathname:/input/trigger/click
* subpathname:/input/trigger/value
@@ -4184,8 +4313,8 @@ Supported input sources:
* subpathname:/input/trackpad/y
* subpathname:/input/trackpad/click
* subpathname:/input/trackpad/touch
-* subpathname:/input/palm/pose
-* subpathname:/input/pointer/pose
+* subpathname:/input/grip/pose
+* subpathname:/input/aim/pose
* subpathname:/output/haptic
==== HTC Vive Pro Profile
@@ -4199,7 +4328,7 @@ Valid for user paths:
This interaction profile represents the input sources on the Vive Pro
headset.
-Supported input sources:
+Supported component paths:
* subpathname:/input/system/click (may: not be available for application
use)
@@ -4219,10 +4348,10 @@ Valid for user paths:
This interaction profile represents the input sources and haptics on the
Microsoft Mixed Reality Controller.
-Supported input sources:
+Supported component paths:
* subpathname:/input/menu/click
-* subpathname:/input/grip/click
+* subpathname:/input/squeeze/click
* subpathname:/input/trigger/value
* subpathname:/input/thumbstick/x
* subpathname:/input/thumbstick/y
@@ -4231,8 +4360,8 @@ Supported input sources:
* subpathname:/input/trackpad/y
* subpathname:/input/trackpad/click
* subpathname:/input/trackpad/touch
-* subpathname:/input/palm/pose
-* subpathname:/input/pointer/pose
+* subpathname:/input/grip/pose
+* subpathname:/input/aim/pose
* subpathname:/output/haptic
==== Microsoft Xbox Controller Profile
@@ -4246,7 +4375,7 @@ Valid for user paths:
This interaction profile represents the input sources and haptics on the
Microsoft Xbox Controller.
-Supported input sources:
+Supported component paths:
* subpathname:/input/menu/click
* subpathname:/input/view/click
@@ -4282,10 +4411,10 @@ Valid for user paths:
* pathname:/user/hand/left
* pathname:/user/hand/right
-This interaction profile represents the input sources and haptics on the
-Oculus Go controller.
+This interaction profile represents the input sources on the Oculus Go
+controller.
-Supported input sources:
+Supported component paths:
* subpathname:/input/system/click (may: not be available for application
use)
@@ -4294,8 +4423,8 @@ Supported input sources:
* subpathname:/input/trackpad/y
* subpathname:/input/trackpad/click
* subpathname:/input/trackpad/touch
-* subpathname:/input/palm/pose
-* subpathname:/input/pointer/pose
+* subpathname:/input/grip/pose
+* subpathname:/input/aim/pose
==== Oculus Touch Controller Profile
@@ -4310,7 +4439,7 @@ Valid for user paths:
This interaction profile represents the input sources and haptics on the
Oculus Touch controller.
-Supported input sources:
+Supported component paths:
* On pathname:/user/hand/left only:
** subpathname:/input/x/click
@@ -4318,14 +4447,14 @@ Supported input sources:
** subpathname:/input/y/click
** subpathname:/input/y/touch
** subpathname:/input/menu/click
-** subpathname:/input/system/click (may: not be available for application
- use)
* On pathname:/user/hand/right only:
** subpathname:/input/a/click
** subpathname:/input/a/touch
** subpathname:/input/b/click
** subpathname:/input/b/touch
-* subpathname:/input/grip/value
+** subpathname:/input/system/click (may: not be available for application
+ use)
+* subpathname:/input/squeeze/value
* subpathname:/input/trigger/value
* subpathname:/input/trigger/touch
* subpathname:/input/thumbstick/x
@@ -4333,14 +4462,14 @@ Supported input sources:
* subpathname:/input/thumbstick/click
* subpathname:/input/thumbstick/touch
* subpathname:/input/thumbrest/touch
-* subpathname:/input/palm/pose
-* subpathname:/input/pointer/pose
+* subpathname:/input/grip/pose
+* subpathname:/input/aim/pose
* subpathname:/output/haptic
-==== Valve Knuckles Controller Profile
+==== Valve Index Controller Profile
-Path: pathname:/interaction_profiles/valve/knuckles_controller
+Path: pathname:/interaction_profiles/valve/index_controller
Valid for user paths:
@@ -4348,9 +4477,9 @@ Valid for user paths:
* pathname:/user/hand/right
This interaction profile represents the input sources and haptics on the
-Valve Knuckles controller.
+Valve Index controller.
-Supported input sources:
+Supported component paths:
* subpathname:/input/system/click (may: not be available for application
use)
@@ -4360,8 +4489,8 @@ Supported input sources:
* subpathname:/input/a/touch
* subpathname:/input/b/click
* subpathname:/input/b/touch
-* subpathname:/input/grip/value
-* subpathname:/input/grip/force
+* subpathname:/input/squeeze/value
+* subpathname:/input/squeeze/force
* subpathname:/input/trigger/click
* subpathname:/input/trigger/value
* subpathname:/input/trigger/touch
@@ -4373,8 +4502,8 @@ Supported input sources:
* subpathname:/input/trackpad/y
* subpathname:/input/trackpad/force
* subpathname:/input/trackpad/touch
-* subpathname:/input/palm/pose
-* subpathname:/input/pointer/pose
+* subpathname:/input/grip/pose
+* subpathname:/input/aim/pose
* subpathname:/output/haptic
[[spaces]]
@@ -4419,14 +4548,6 @@ origin to a static position in the world, a runtime with an inside-out
tracking system may: introduce slight adjustments to the origin of each
space on a continuous basis to keep each origin in place.
-Spaces like the `STAGE` space may be reconfigured by the user, causing their
-origin to jump instantaneously.
-When a discontinuity in the origin of a space occurs, runtimes should: delay
-representing these changes to the application until the next call to
-flink:xrPollEvent.
-This allows applications to cleanly detect the change in key poses before
-and after the discontinuity.
-
Beyond well-known reference spaces, runtimes expose other
independently-tracked spaces, such as a pose action space that tracks the
pose of a motion controller over time.
@@ -4434,7 +4555,7 @@ pose of a motion controller over time.
When one or both spaces are tracking a dynamic object, passing in an updated
time to flink:xrLocateSpace each frame will result in an updated relative
pose.
-For example, the relationship of the left hand's pose action space to the
+For example, the location of the left hand's pose action space in the
`STAGE` reference space will change each frame as the user's hand moves
relative to the stage's predefined origin on the floor.
In other XR APIs, it is common to report the "pose" of an object relative to
@@ -4448,7 +4569,7 @@ To satisfy this wide variability, "poses" are always described as the
relationship between two spaces.
Some devices improve their understanding of the world as the device is used.
-The relation returned by flink:xrLocateSpace in later frames may: change
+The location returned by flink:xrLocateSpace in later frames may: change
over time, even for spaces that track static objects, as either the target
space or base space adjusts its origin.
@@ -4505,6 +4626,8 @@ displays and may be uncomfortable to view if too large.
To obtain the ideal view and projection transforms to use each frame for
rendering world content, applications should call flink:xrLocateViews
instead of using this space.
++
+Runtimes must: support this reference space.
* ename:XR_REFERENCE_SPACE_TYPE_LOCAL.
The `LOCAL` reference space establishes a world-locked origin,
gravity-aligned to exclude pitch and roll, with +Y up, +X to the right,
@@ -4533,14 +4656,16 @@ These inferred poses can, for example, be based on neck model updates,
inertial dead reckoning, or a last-known position, so long as it is still
reasonable for the application to use that pose.
While a runtime is providing position data, it must: continue to set
-ename:XR_SPACE_RELATION_POSITION_VALID_BIT and
+ename:XR_SPACE_LOCATION_POSITION_VALID_BIT and
ename:XR_VIEW_STATE_POSITION_VALID_BIT but it can: clear
-ename:XR_SPACE_RELATION_POSITION_TRACKED_BIT and
+ename:XR_SPACE_LOCATION_POSITION_TRACKED_BIT and
ename:XR_VIEW_STATE_POSITION_TRACKED_BIT to indicate that the position is
inferred or last-known in this way.
+
When tracking is recovered, runtimes should: snap the pose of other spaces
back into position relative to the `LOCAL` space's original origin.
++
+Runtimes must: support this reference space.
* ename:XR_REFERENCE_SPACE_TYPE_STAGE.
The `STAGE` reference space is a runtime-defined flat, rectangular space
that is empty and can be walked around on.
@@ -4551,9 +4676,10 @@ back into position relative to the `LOCAL` space's original origin.
runtime-specific UI.
Apps can use flink:xrGetReferenceSpaceBoundsRect to determine the extents
of the `STAGE` reference space's XZ bounds rectangle, if defined.
-+ `STAGE` space is useful when an app needs to render *standing-scale*
-content (no bounds) or *room-scale* content (with bounds) that is relative
-to the physical floor.
++
+`STAGE` space is useful when an app needs to render *standing-scale* content
+(no bounds) or *room-scale* content (with bounds) that is relative to the
+physical floor.
+
When the user redefines the origin or bounds of the current `STAGE` space,
or the runtime otherwise switches to a new `STAGE` definition, the runtime
@@ -4569,9 +4695,9 @@ These inferred poses can, for example, be based on neck model updates,
inertial dead reckoning, or a last-known position, so long as it is still
reasonable for the application to use that pose.
While a runtime is providing position data, it must: continue to set
-ename:XR_SPACE_RELATION_POSITION_VALID_BIT and
+ename:XR_SPACE_LOCATION_POSITION_VALID_BIT and
ename:XR_VIEW_STATE_POSITION_VALID_BIT but it can: clear
-ename:XR_SPACE_RELATION_POSITION_TRACKED_BIT and
+ename:XR_SPACE_LOCATION_POSITION_TRACKED_BIT and
ename:XR_VIEW_STATE_POSITION_TRACKED_BIT to indicate that the position is
inferred or last-known in this way.
+
@@ -4639,7 +4765,7 @@ XrResult xrGetReferenceSpaceBoundsRect(
.Valid Usage (Implicit)
****
* [[VUID-xrGetReferenceSpaceBoundsRect-session-parameter]] pname:session must: be a valid slink:XrSession handle
-* [[VUID-xrGetReferenceSpaceBoundsRect-referenceSpaceType-parameter]] pname:referenceSpaceType must: be a valid slink:XrReferenceSpaceType value
+* [[VUID-xrGetReferenceSpaceBoundsRect-referenceSpaceType-parameter]] pname:referenceSpaceType must: be a valid elink:XrReferenceSpaceType value
* [[VUID-xrGetReferenceSpaceBoundsRect-bounds-parameter]] pname:bounds must: be a pointer to an slink:XrExtent2Df structure
****
@@ -4683,21 +4809,22 @@ calculate future frame times using pname:displayPeriod.
The pname:pose provided here must: only describe the change in the natural
origin of the reference space and must: not incorporate any origin offsets
specified by the app during calls to flink:xrCreateReferenceSpace.
-If the runtime does not know the relationship between the new and the
-previous space, pname:poseValid must: be false, and the position and
-orientation of the pname:pose are undefined.
+If the runtime does not know the location of the space's new origin relative
+to its previous origin, pname:poseValid must: be false, and the position and
+orientation of pname:poseInPreviousSpace are undefined.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[XrEventDataReferenceSpaceChangePending,XrEventDataReferenceSpaceChangePending]]
[source,c++]
----
typedef struct XrEventDataReferenceSpaceChangePending {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- XrReferenceSpaceType referenceSpaceType;
- XrTime changeTime;
- XrBool32 poseValid;
- XrPosef poseInPreviousSpace;
+ XrStructureType type;
+ const void* next;
+ XrSession session;
+ XrReferenceSpaceType referenceSpaceType;
+ XrTime changeTime;
+ XrBool32 poseValid;
+ XrPosef poseInPreviousSpace;
} XrEventDataReferenceSpaceChangePending;
----
@@ -4705,6 +4832,8 @@ typedef struct XrEventDataReferenceSpaceChangePending {
****
* pname:type is the elink:XrStructureType of this structure.
* pname:next is code:NULL or a pointer to an extension-specific structure.
+* pname:session is the slink:XrSession for which the reference space is
+ changing.
* pname:referenceSpaceType is the elink:XrReferenceSpaceType that is
changing.
* pname:changeTime is the target basetype:XrTime after which
@@ -4721,8 +4850,9 @@ typedef struct XrEventDataReferenceSpaceChangePending {
.Valid Usage (Implicit)
****
* [[VUID-XrEventDataReferenceSpaceChangePending-type-type]] pname:type must: be ename:XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING
-* [[VUID-XrEventDataReferenceSpaceChangePending-next-next]] pname:next must: be code:NULL
-* [[VUID-XrEventDataReferenceSpaceChangePending-referenceSpaceType-parameter]] pname:referenceSpaceType must: be a valid slink:XrReferenceSpaceType value
+* [[VUID-XrEventDataReferenceSpaceChangePending-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrEventDataReferenceSpaceChangePending-session-parameter]] pname:session must: be a valid slink:XrSession handle
+* [[VUID-XrEventDataReferenceSpaceChangePending-referenceSpaceType-parameter]] pname:referenceSpaceType must: be a valid elink:XrReferenceSpaceType value
****
--
@@ -4738,41 +4868,38 @@ identifier.
Some example well-known pose action paths:
****
-* pathname:/user/hand/left/input/palm
-* pathname:/user/hand/left/input/pointer
-* pathname:/user/hand/right/input/palm
-* pathname:/user/hand/right/input/pointer
+* pathname:/user/hand/left/input/grip
+* pathname:/user/hand/left/input/aim
+* pathname:/user/hand/right/input/grip
+* pathname:/user/hand/right/input/aim
****
For definitions of these well-known pose device paths, see the discussion of
<<semantic-path-input,device input subpaths>> in the Semantic Paths chapter.
+[[spaces-action-spaces-lifetime]]
==== Action Spaces Lifetime
-slink:XrSpace handles created for a pose action must: initially be
-unlocatable until the corresponding pose action has been synchronized and
-calls to flink:xrGetActionStatePose report that the action is active.
+slink:XrSpace handles created for a pose action must: be unlocatable unless
+the action set that contains the corresponding pose action was set as active
+via the most recent flink:xrSyncActions call.
If the underlying device that is active for the action changes, the device
this space is tracking must: only change to track the new device when
-flink:xrSyncActionData is called.
-If flink:xrLocateSpace is called with an inactive action space, it will
-return no position or orientation and both
-ename:XR_SPACE_RELATION_POSITION_VALID_BIT and
-ename:XR_SPACE_RELATION_ORIENTATION_VALID_BIT will be unset.
-If flink:xrLocateViews is called with an inactive action space (although
-calling flink:xrLocateViews with an action space is not generally useful),
-it will return no position or orientation and both
+flink:xrSyncActions is called.
+
+If flink:xrLocateSpace is called with an unlocatable action space, the
+implementation must: return no position or orientation and both
+ename:XR_SPACE_LOCATION_POSITION_VALID_BIT and
+ename:XR_SPACE_LOCATION_ORIENTATION_VALID_BIT must: be unset.
+If flink:xrLocateViews is called with an unlocatable action space, the
+implementation must: return no position or orientation and both
ename:XR_VIEW_STATE_POSITION_VALID_BIT and
-ename:XR_VIEW_STATE_ORIENTATION_VALID_BIT will be unset.
-If flink:xrDestroyAction is called and an slink:XrAction is destroyed, any
-slink:XrSpace handles created from this slink:XrAction using
-flink:xrCreateActionSpace, will also be destroyed.
+ename:XR_VIEW_STATE_ORIENTATION_VALID_BIT must: be unset.
-
-[[space_api]]
-=== Space API
+[[space_lifecycle]]
+=== Space Lifecycle
There are a small set of core APIs that allow applications to reason about
-reference spaces, action spaces, and the relationships between them all.
+reference spaces, action spaces, and their relative locations.
==== xrEnumerateReferenceSpaces
@@ -4809,8 +4936,8 @@ XrResult xrEnumerateReferenceSpaces(
Enumerates the set of reference space types that this runtime supports for a
given session.
-Runtimes must: always return the same values from this enumeration for the
-lifetime of the session.
+Runtimes must: always return identical buffer contents from this enumeration
+for the lifetime of the session.
If a session enumerates support for a given reference space type, calls to
flink:xrCreateReferenceSpace must: succeed for that session, with any
@@ -4821,9 +4948,8 @@ flink:xrLocateSpace.
.Valid Usage (Implicit)
****
* [[VUID-xrEnumerateReferenceSpaces-session-parameter]] pname:session must: be a valid slink:XrSession handle
-* [[VUID-xrEnumerateReferenceSpaces-spaceCapacityInput-parameter]] If pname:spaceCapacityInput is not `0`, pname:spaceCapacityInput must: be a valid code:uint32_t value
-* [[VUID-xrEnumerateReferenceSpaces-spaceCountOutput-parameter]] If pname:spaceCountOutput is not code:NULL, pname:spaceCountOutput must: be a pointer to a code:uint32_t value
-* [[VUID-xrEnumerateReferenceSpaces-spaces-parameter]] If pname:spaceCapacityInput is not `0`, pname:spaces must: be a pointer to an array of pname:spaceCapacityInput slink:XrReferenceSpaceType values
+* [[VUID-xrEnumerateReferenceSpaces-spaceCountOutput-parameter]] pname:spaceCountOutput must: be a pointer to a code:uint32_t value
+* [[VUID-xrEnumerateReferenceSpaces-spaces-parameter]] If pname:spaceCapacityInput is not `0`, pname:spaces must: be a pointer to an array of pname:spaceCapacityInput elink:XrReferenceSpaceType values
****
.Return Codes
@@ -4880,9 +5006,6 @@ flink:xrDestroySpace function.
The runtime must: return ename:XR_ERROR_REFERENCE_SPACE_UNSUPPORTED if the
given reference space type is not supported by this pname:session.
-The runtime must: return ename:XR_ERROR_POSE_INVALID if the pose passed in
-pname:createInfo.poseInReferenceSpace contains non-unit quaternions.
-
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
@@ -4919,10 +5042,10 @@ The slink:XrReferenceSpaceCreateInfo structure is defined as:
[source,c++]
----
typedef struct XrReferenceSpaceCreateInfo {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- XrReferenceSpaceType referenceSpaceType;
- XrPosef poseInReferenceSpace;
+ XrStructureType type;
+ const void* next;
+ XrReferenceSpaceType referenceSpaceType;
+ XrPosef poseInReferenceSpace;
} XrReferenceSpaceCreateInfo;
----
@@ -4932,16 +5055,16 @@ typedef struct XrReferenceSpaceCreateInfo {
* pname:next is code:NULL or a pointer to an extension-specific structure.
* pname:referenceSpaceType is the chosen elink:XrReferenceSpaceType.
* pname:poseInReferenceSpace is an slink:XrPosef defining the position and
-orientation of the new space's origin within the natural reference frame of
-the reference space.
+ orientation of the new space's origin within the natural reference frame
+ of the reference space.
****
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
* [[VUID-XrReferenceSpaceCreateInfo-type-type]] pname:type must: be ename:XR_TYPE_REFERENCE_SPACE_CREATE_INFO
-* [[VUID-XrReferenceSpaceCreateInfo-next-next]] pname:next must: be code:NULL
-* [[VUID-XrReferenceSpaceCreateInfo-referenceSpaceType-parameter]] pname:referenceSpaceType must: be a valid slink:XrReferenceSpaceType value
+* [[VUID-XrReferenceSpaceCreateInfo-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrReferenceSpaceCreateInfo-referenceSpaceType-parameter]] pname:referenceSpaceType must: be a valid elink:XrReferenceSpaceType value
****
--
@@ -4956,15 +5079,14 @@ The flink:xrCreateActionSpace function is defined as:
[source,c++]
----
XrResult xrCreateActionSpace(
- XrAction action,
+ XrSession session,
const XrActionSpaceCreateInfo* createInfo,
XrSpace* space);
----
.Parameter Descriptions
****
-* pname:action is a handle to the parent slink:XrAction previously created
- with flink:xrCreateAction.
+* pname:session is the slink:XrSession to create the action space in.
* pname:createInfo is the slink:XrActionSpaceCreateInfo used to specify the
space.
* pname:space is the returned space handle.
@@ -4981,16 +5103,13 @@ The slink:XrSpace handle must be eventually freed via the
flink:xrDestroySpace function or by destroying the parent slink:XrAction
handle.
-The runtime must: return ename:XR_ERROR_HANDLE_INVALID if the action
-provided in pname:action is not a valid action.
-
-The runtime must: return ename:XR_ERROR_POSE_INVALID if the pose passed in
-pname:createInfo.poseInActionSpace contains non-unit quaternions.
+The runtime must: return ename:XR_ERROR_ACTION_TYPE_MISMATCH if the action
+provided in pname:action is not of type ename:XR_ACTION_TYPE_POSE_INPUT.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
-* [[VUID-xrCreateActionSpace-action-parameter]] pname:action must: be a valid slink:XrAction handle
+* [[VUID-xrCreateActionSpace-session-parameter]] pname:session must: be a valid slink:XrSession handle
* [[VUID-xrCreateActionSpace-createInfo-parameter]] pname:createInfo must: be a pointer to a valid slink:XrActionSpaceCreateInfo structure
* [[VUID-xrCreateActionSpace-space-parameter]] pname:space must: be a pointer to an slink:XrSpace handle
****
@@ -4999,15 +5118,19 @@ pname:createInfo.poseInActionSpace contains non-unit quaternions.
****
<<fundamentals-successcodes,Success>>::
* ename:XR_SUCCESS
+* ename:XR_SESSION_LOSS_PENDING
<<fundamentals-errorcodes,Failure>>::
* ename:XR_ERROR_INSTANCE_LOST
+* ename:XR_ERROR_SESSION_LOST
* ename:XR_ERROR_RUNTIME_FAILURE
* ename:XR_ERROR_OUT_OF_MEMORY
* ename:XR_ERROR_HANDLE_INVALID
+* ename:XR_ERROR_ACTION_TYPE_MISMATCH
* ename:XR_ERROR_LIMIT_REACHED
* ename:XR_ERROR_POSE_INVALID
-* ename:XR_ERROR_PATH_INVALID
* ename:XR_ERROR_VALIDATION_FAILURE
+* ename:XR_ERROR_PATH_UNSUPPORTED
+* ename:XR_ERROR_PATH_INVALID
****
--
@@ -5021,10 +5144,11 @@ The slink:XrActionSpaceCreateInfo structure is defined as:
[source,c++]
----
typedef struct XrActionSpaceCreateInfo {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- XrPath subactionPath;
- XrPosef poseInActionSpace;
+ XrStructureType type;
+ const void* next;
+ XrAction action;
+ XrPath subactionPath;
+ XrPosef poseInActionSpace;
} XrActionSpaceCreateInfo;
----
@@ -5032,20 +5156,25 @@ typedef struct XrActionSpaceCreateInfo {
****
* pname:type is the elink:XrStructureType of this structure.
* pname:next is code:NULL or a pointer to an extension-specific structure.
+* pname:action is a handle to a pose slink:XrAction previously created with
+ flink:xrCreateAction.
* pname:subactionPath is dlink:XR_NULL_PATH or an basetype:XrPath that was
- specified when the action was created as valid to filter on.
+ specified when the action was created.
+ If pname:subactionPath is a valid path not specified when the action was
+ created the runtime must: return ename:XR_ERROR_PATH_UNSUPPORTED.
If this parameter is set, the runtime must: create a space that is
relative to only that subaction's pose binding.
* pname:poseInActionSpace is an slink:XrPosef defining the position and
-orientation of the new space's origin within the natural reference frame of
-the pose action.
+ orientation of the new space's origin within the natural reference frame
+ of the pose action.
****
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
* [[VUID-XrActionSpaceCreateInfo-type-type]] pname:type must: be ename:XR_TYPE_ACTION_SPACE_CREATE_INFO
-* [[VUID-XrActionSpaceCreateInfo-next-next]] pname:next must: be code:NULL
+* [[VUID-XrActionSpaceCreateInfo-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrActionSpaceCreateInfo-action-parameter]] pname:action must: be a valid slink:XrAction handle
****
--
@@ -5071,8 +5200,6 @@ XrResult xrDestroySpace(
****
slink:XrSpace handles are destroyed using flink:xrDestroySpace.
-If the slink:XrSpace is invalid the runtime must return
-ename:XR_ERROR_HANDLE_INVALID.
The runtime may: still use this space if there are active dependencies (e.g,
compositions in progress).
@@ -5082,25 +5209,41 @@ compositions in progress).
* [[VUID-xrDestroySpace-space-parameter]] pname:space must: be a valid slink:XrSpace handle
****
+.Thread Safety
+****
+* Access to pname:space, and any child handles, must: be externally synchronized
+****
+
.Return Codes
****
<<fundamentals-successcodes,Success>>::
* ename:XR_SUCCESS
<<fundamentals-errorcodes,Failure>>::
-* ename:XR_ERROR_INSTANCE_LOST
-* ename:XR_ERROR_RUNTIME_FAILURE
* ename:XR_ERROR_HANDLE_INVALID
-* ename:XR_ERROR_VALIDATION_FAILURE
****
--
+[[locating_spaces]]
+=== Locating Spaces
+
+Applications use the flink:xrLocateSpace function to find the pose of an
+slink:XrSpace's origin within a base slink:XrSpace at a given historical or
+predicted time.
+If an application wants to know the velocity of the space's origin, it can:
+chain an slink:XrSpaceVelocity structure to the pname:next pointer of the
+slink:XrSpaceLocation structure when calling the flink:xrLocateSpace
+function.
+Applications should: inspect the output elink:XrSpaceLocationFlagBits and
+elink:XrSpaceVelocityFlagBits to determine the validity and tracking status
+of the components of the location.
+
==== xrLocateSpace
-[open,refpage='xrLocateSpace',desc='Locates a space with reference to another space',type='protos',xrefs='XrSpace XrSpaceRelationFlagBits']
+[open,refpage='xrLocateSpace',desc='Locates a space with reference to another space',type='protos',xrefs='XrSpace XrSpaceLocationFlagBits']
--
-flink:xrLocateSpace provides the physical relationship of a space relative
-to a base space at a specified time, if currently known by the runtime.
+flink:xrLocateSpace provides the physical location of a space in a base
+space at a specified time, if currently known by the runtime.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[xrLocateSpace,xrLocateSpace]]
@@ -5110,7 +5253,7 @@ XrResult xrLocateSpace(
XrSpace space,
XrSpace baseSpace,
XrTime time,
- XrSpaceRelation* relation);
+ XrSpaceLocation* location);
----
.Parameter Descriptions
@@ -5118,27 +5261,26 @@ XrResult xrLocateSpace(
* pname:space identifies the target space to locate.
* pname:baseSpace identifies the underlying space in which to locate
pname:space.
-* pname:time is the time for which the relation should be provided.
-* pname:relation provides a relation which transforms coordinates from
- pname:baseSpace to pname:space.
+* pname:time is the time for which the location should be provided.
+* pname:location provides the location of pname:space in pname:baseSpace.
****
-For a pname:time in the past, the runtime should: relate the spaces based on
+For a pname:time in the past, the runtime should: locate the spaces based on
the runtime's most accurate current understanding of how the world was at
that historical time.
-For a pname:time in the future, the runtime should: relate the spaces based
+For a pname:time in the future, the runtime should: locate the spaces based
on the runtime's most up-to-date prediction of how the world will be at that
future time.
The minimum valid range of values for pname:time are described in
<<prediction-time-limits>>.
For values of pname:time outside this range, flink:xrLocateSpace may: return
-a relation with no position and ename:XR_SPACE_RELATION_POSITION_VALID_BIT
+a location with no position and ename:XR_SPACE_LOCATION_POSITION_VALID_BIT
unset.
Some devices improve their understanding of the world as the device is used.
-The relation returned by flink:xrLocateSpace for a given pname:space,
+The location returned by flink:xrLocateSpace for a given pname:space,
pname:baseSpace and pname:time may: change over time, even for spaces that
track static objects, as one or both spaces adjust their origins.
@@ -5149,40 +5291,65 @@ These inferred poses can, for example, be based on neck model updates,
inertial dead reckoning, or a last-known position, so long as it is still
reasonable for the application to use that pose.
While a runtime is providing position data, it must: continue to set
-ename:XR_SPACE_RELATION_POSITION_VALID_BIT but it can: clear
-ename:XR_SPACE_RELATION_POSITION_TRACKED_BIT to indicate that the position
+ename:XR_SPACE_LOCATION_POSITION_VALID_BIT but it can: clear
+ename:XR_SPACE_LOCATION_POSITION_TRACKED_BIT to indicate that the position
is inferred or last-known in this way.
-If the runtime has not yet observed even a last-known pose for how
-pname:space and pname:baseSpace relate (e.g. one space is an action space
-bound to a motion controller that has not yet been detected, or the two
-spaces are in disconnected fragments of the runtime's tracked volume), the
-runtime should: return a relation with no position and
-ename:XR_SPACE_RELATION_POSITION_VALID_BIT unset.
+If the runtime has not yet observed even a last-known pose for how to locate
+pname:space in pname:baseSpace (e.g. one space is an action space bound to a
+motion controller that has not yet been detected, or the two spaces are in
+disconnected fragments of the runtime's tracked volume), the runtime should:
+return a location with no position and
+ename:XR_SPACE_LOCATION_POSITION_VALID_BIT unset.
-The runtime must: return a relation with both
-ename:XR_SPACE_RELATION_POSITION_VALID_BIT and
-ename:XR_SPACE_RELATION_POSITION_TRACKED_BIT set when relating pname:space
+The runtime must: return a location with both
+ename:XR_SPACE_LOCATION_POSITION_VALID_BIT and
+ename:XR_SPACE_LOCATION_POSITION_TRACKED_BIT set when locating pname:space
and pname:baseSpace if both spaces were created relative to the same entity
(e.g. two action spaces for the same action), even if the entity is
currently untracked.
-The relation in this case is the difference in the two spaces'
+The location in this case is the difference in the two spaces'
application-specified transforms relative to that common entity.
-The runtime should: return a relation with
-ename:XR_SPACE_RELATION_POSITION_VALID_BIT set and
-ename:XR_SPACE_RELATION_POSITION_TRACKED_BIT unset for spaces tracking two
+The runtime should: return a location with
+ename:XR_SPACE_LOCATION_POSITION_VALID_BIT set and
+ename:XR_SPACE_LOCATION_POSITION_TRACKED_BIT unset for spaces tracking two
static entities in the world when their relative pose is known to the
runtime.
This enables applications to make use of the runtime's latest knowledge of
the world, even during tracking loss.
+If an slink:XrSpaceVelocity structure is chained to the pname:next pointer
+of slink:XrSpaceLocation, the runtime should: fill in the linear and angular
+velocity of the origin of pname:space within the reference frame of
+pname:baseSpace.
+If the runtime provides linear velocity or angular velocity, it must: set
+ename:XR_SPACE_VELOCITY_LINEAR_VALID_BIT or
+ename:XR_SPACE_VELOCITY_ANGULAR_VALID_BIT, respectively.
+
+[[example_locate_space_code]]
+The following example code shows how an application can get both the
+location and velocity of a space within a base space using the
+flink:xrLocateSpace function by chaining an slink:XrSpaceVelocity to the
+next pointer of slink:XrSpaceLocation and calling flink:xrLocateSpace.
+
+[source,C++]
+----
+XrSpace space; // previously initialized
+XrSpace baseSpace; // previously initialized
+XrTime time; // previously initialized
+
+XrSpaceVelocity velocity {XR_TYPE_SPACE_VELOCITY};
+XrSpaceLocation location {XR_TYPE_SPACE_LOCATION, &velocity};
+xrLocateSpace(space, baseSpace, time, &location);
+----
+
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
* [[VUID-xrLocateSpace-space-parameter]] pname:space must: be a valid slink:XrSpace handle
* [[VUID-xrLocateSpace-baseSpace-parameter]] pname:baseSpace must: be a valid slink:XrSpace handle
-* [[VUID-xrLocateSpace-relation-parameter]] pname:relation must: be a pointer to an slink:XrSpaceRelation structure
+* [[VUID-xrLocateSpace-location-parameter]] pname:location must: be a pointer to an slink:XrSpaceLocation structure
* [[VUID-xrLocateSpace-commonparent]] Both of pname:baseSpace and pname:space must: have been created, allocated, or retrieved from the same slink:XrSession
****
@@ -5197,96 +5364,67 @@ the world, even during tracking loss.
* ename:XR_ERROR_RUNTIME_FAILURE
* ename:XR_ERROR_HANDLE_INVALID
* ename:XR_ERROR_VALIDATION_FAILURE
+* ename:XR_ERROR_TIME_INVALID
****
--
-[open,refpage='XrSpaceRelation',desc='Contains info about space relationships',type='structs',xrefs='XrSpace xrLocateSpace XrSpaceRelationFlags']
+[open,refpage='XrSpaceLocation',desc='Contains info about a space's location',type='structs',xrefs='XrSpace xrLocateSpace XrSpaceLocationFlags XrSpaceVelocity']
--
-The slink:XrSpaceRelation structure is defined as:
+The slink:XrSpaceLocation structure is defined as:
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
-[[XrSpaceRelation,XrSpaceRelation]]
+[[XrSpaceLocation,XrSpaceLocation]]
[source,c++]
----
-typedef struct XrSpaceRelation {
+typedef struct XrSpaceLocation {
XrStructureType type;
- void* XR_MAY_ALIAS next;
- XrSpaceRelationFlags relationFlags;
- XrTime time;
+ void* next;
+ XrSpaceLocationFlags locationFlags;
XrPosef pose;
- XrVector3f linearVelocity;
- XrVector3f angularVelocity;
- XrVector3f linearAcceleration;
- XrVector3f angularAcceleration;
-} XrSpaceRelation;
+} XrSpaceLocation;
----
.Member Descriptions
****
* pname:type is the elink:XrStructureType of this structure.
-* pname:next is code:NULL or a pointer to an extension-specific structure.
-* pname:relationFlags is a bitfield, with bit masks defined in
- elink:XrSpaceRelationFlagBits, to indicate which members contain valid
+* pname:next is code:NULL or a pointer to an extension-specific structure,
+ such as slink:XrSpaceVelocity.
+* pname:locationFlags is a bitfield, with bit masks defined in
+ elink:XrSpaceLocationFlagBits, to indicate which members contain valid
data.
If none of the bits are set, no other fields in this structure should: be
considered to be valid or meaningful.
-* pname:time is the basetype:XrTime for which the other fields have been
- populated, possibly through prediction or interpolation.
-* pname:pose is an slink:XrPosef defining the position and rotation of the
-origin of flink:xrLocateSpace::pname:space within the reference frame of
-flink:xrLocateSpace::pname:baseSpace.
-* pname:linearVelocity is the positional velocity of the origin of
- flink:xrLocateSpace::pname:space within the reference frame of
- flink:xrLocateSpace::pname:baseSpace, in units of meters per second.
-* pname:angularVelocity is the angular velocity of the origin of
- flink:xrLocateSpace::pname:space within the reference frame of
- flink:xrLocateSpace::pname:baseSpace, expressed within the reference frame
- of flink:xrLocateSpace::pname:space.
- It is represented as a 3D angular velocity vector, with units of radians
- per second, suitable for integration or conversion to other formats
- through use of the "`exponential map`" construct.
-* pname:linearAcceleration is the positional acceleration of the origin of
- flink:xrLocateSpace::pname:space within the reference frame of
- flink:xrLocateSpace::pname:baseSpace, in units of meters per second per
- second.
-* pname:angularAcceleration is the angular acceleration of the origin of
- flink:xrLocateSpace::pname:space within the reference frame of
- flink:xrLocateSpace::pname:baseSpace, expressed within the reference frame
- of flink:xrLocateSpace::pname:space.
- It is represented as a 3D vector, with units of radians per second per
- second.
+* pname:pose is an slink:XrPosef defining the position and orientation of
+ the origin of flink:xrLocateSpace::pname:space within the reference frame
+ of flink:xrLocateSpace::pname:baseSpace.
****
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
-* [[VUID-XrSpaceRelation-type-type]] pname:type must: be ename:XR_TYPE_SPACE_RELATION
-* [[VUID-XrSpaceRelation-next-next]] pname:next must: be code:NULL
-* [[VUID-XrSpaceRelation-relationFlags-parameter]] pname:relationFlags must: be 0 or a valid combination of elink:XrSpaceRelationFlagBits values
+* [[VUID-XrSpaceLocation-type-type]] pname:type must: be ename:XR_TYPE_SPACE_LOCATION
+* [[VUID-XrSpaceLocation-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>. See also: slink:XrSpaceVelocity
+* [[VUID-XrSpaceLocation-locationFlags-parameter]] pname:locationFlags must: be `0` or a valid combination of elink:XrSpaceLocationFlagBits values
****
--
-[open,refpage='XrSpaceRelationFlags',desc='Space relation flags',type='flags',xrefs='XrSpaceRelation']
+[open,refpage='XrSpaceLocationFlags',desc='Space location flags',type='flags',xrefs='XrSpaceLocation']
--
-The pname:relationFlags member is a bitwise-OR of zero or more of the
+The pname:locationFlags member is a bitwise-OR of zero or more of the
following flags:
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
-[[XrSpaceRelationFlagBits,XrSpaceRelationFlagBits]]
+[[XrSpaceLocationFlagBits,XrSpaceLocationFlagBits]]
[source,c++]
----
-// Flag bits for XrSpaceRelationFlags
-static const XrSpaceRelationFlags XR_SPACE_RELATION_ORIENTATION_VALID_BIT = 0x00000001;
-static const XrSpaceRelationFlags XR_SPACE_RELATION_POSITION_VALID_BIT = 0x00000002;
-static const XrSpaceRelationFlags XR_SPACE_RELATION_LINEAR_VELOCITY_VALID_BIT = 0x00000004;
-static const XrSpaceRelationFlags XR_SPACE_RELATION_ANGULAR_VELOCITY_VALID_BIT = 0x00000008;
-static const XrSpaceRelationFlags XR_SPACE_RELATION_LINEAR_ACCELERATION_VALID_BIT = 0x00000010;
-static const XrSpaceRelationFlags XR_SPACE_RELATION_ANGULAR_ACCELERATION_VALID_BIT = 0x00000020;
-static const XrSpaceRelationFlags XR_SPACE_RELATION_ORIENTATION_TRACKED_BIT = 0x00000040;
-static const XrSpaceRelationFlags XR_SPACE_RELATION_POSITION_TRACKED_BIT = 0x00000080;
+// Flag bits for XrSpaceLocationFlags
+static const XrSpaceLocationFlags XR_SPACE_LOCATION_ORIENTATION_VALID_BIT = 0x00000001;
+static const XrSpaceLocationFlags XR_SPACE_LOCATION_POSITION_VALID_BIT = 0x00000002;
+static const XrSpaceLocationFlags XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT = 0x00000004;
+static const XrSpaceLocationFlags XR_SPACE_LOCATION_POSITION_TRACKED_BIT = 0x00000008;
----
@@ -5294,39 +5432,31 @@ where the flags have the following meaning:
.Flag Descriptions
****
-* ename:XR_SPACE_RELATION_ORIENTATION_VALID_BIT indicates that the
+* ename:XR_SPACE_LOCATION_ORIENTATION_VALID_BIT indicates that the
pname:pose field's pname:orientation field contains valid data.
- For space relations tracking a device with its own inertial tracking,
- ename:XR_SPACE_RELATION_ORIENTATION_TRACKED_BIT should: remain set when
+ For a space location tracking a device with its own inertial tracking,
+ ename:XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT should: remain set when
this bit is set.
-* ename:XR_SPACE_RELATION_POSITION_VALID_BIT indicates that the pname:pose
+* ename:XR_SPACE_LOCATION_POSITION_VALID_BIT indicates that the pname:pose
field's pname:position field contains valid data.
- When a space relation loses tracking, runtimes should: continue to provide
+ When a space location loses tracking, runtimes should: continue to provide
valid but untracked pname:position values that are inferred or last-known,
so long as it's still meaningful for the application to use that position,
- clearing ename:XR_SPACE_RELATION_POSITION_TRACKED_BIT until positional
+ clearing ename:XR_SPACE_LOCATION_POSITION_TRACKED_BIT until positional
tracking is recovered.
-* ename:XR_SPACE_RELATION_LINEAR_VELOCITY_VALID_BIT indicates that the
- pname:linearVelocity field contains valid data.
-* ename:XR_SPACE_RELATION_ANGULAR_VELOCITY_VALID_BIT indicates that the
- pname:angularVelocity field contains valid data.
-* ename:XR_SPACE_RELATION_LINEAR_ACCELERATION_VALID_BIT indicates that the
- pname:linearAcceleration field contains valid data.
-* ename:XR_SPACE_RELATION_ANGULAR_ACCELERATION_VALID_BIT indicates that the
- pname:angularAcceleration field contains valid data.
-* ename:XR_SPACE_RELATION_ORIENTATION_TRACKED_BIT indicates that the
+* ename:XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT indicates that the
pname:pose field's pname:orientation field represents an actively tracked
orientation.
- For a space relation tracking a device with its own inertial tracking,
+ For a space location tracking a device with its own inertial tracking,
this bit should: remain set when
- ename:XR_SPACE_RELATION_ORIENTATION_VALID_BIT is set.
- For a space relation tracking an object whose orientation is no longer
+ ename:XR_SPACE_LOCATION_ORIENTATION_VALID_BIT is set.
+ For a space location tracking an object whose orientation is no longer
known during tracking loss (e.g. an observed QR code), runtimes should:
continue to provide valid but untracked pname:orientation values, so long
as it's still meaningful for the application to use that orientation.
-* ename:XR_SPACE_RELATION_POSITION_TRACKED_BIT indicates that the pname:pose
+* ename:XR_SPACE_LOCATION_POSITION_TRACKED_BIT indicates that the pname:pose
field's pname:position field represents an actively tracked position.
- When a space relation loses tracking, runtimes should: continue to provide
+ When a space location loses tracking, runtimes should: continue to provide
valid but untracked pname:position values that are inferred or last-known,
e.g. based on neck model updates, inertial dead reckoning, or a last-known
position, so long as it's still meaningful for the application to use that
@@ -5334,6 +5464,85 @@ where the flags have the following meaning:
****
--
+[open,refpage='XrSpaceVelocity',desc='Contains info about a space's linear and angular velocity',type='structs',xrefs='XrSpaceLocation XrSpace xrLocateSpace XrSpaceVelocityFlags']
+--
+
+The slink:XrSpaceVelocity structure is defined as:
+
+// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
+[[XrSpaceVelocity,XrSpaceVelocity]]
+[source,c++]
+----
+typedef struct XrSpaceVelocity {
+ XrStructureType type;
+ void* next;
+ XrSpaceVelocityFlags velocityFlags;
+ XrVector3f linearVelocity;
+ XrVector3f angularVelocity;
+} XrSpaceVelocity;
+----
+
+.Member Descriptions
+****
+* pname:type is the elink:XrStructureType of this structure.
+* pname:next is code:NULL or a pointer to an extension-specific structure.
+* pname:velocityFlags is a bitfield, with bit masks defined in
+ elink:XrSpaceVelocityFlagBits, to indicate which members contain valid
+ data.
+ If none of the bits are set, no other fields in this structure should: be
+ considered to be valid or meaningful.
+* pname:linearVelocity is the relative linear velocity of the origin of
+ flink:xrLocateSpace::pname:space with respect to and expressed in the
+ reference frame of flink:xrLocateSpace::pname:baseSpace, in units of
+ meters per second.
+* pname:angularVelocity is the relative angular velocity of
+ flink:xrLocateSpace::pname:space with respect to
+ flink:xrLocateSpace::pname:baseSpace.
+ The vector's direction is expressed in the reference frame of
+ flink:xrLocateSpace::pname:baseSpace and is parallel to the rotational
+ axis of flink:xrLocateSpace::pname:space.
+ The vector's magnitude is the relative angular speed of
+ flink:xrLocateSpace::pname:space in radians per second.
+ The vector follows the right-hand rule for torque/rotation.
+****
+
+// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
+.Valid Usage (Implicit)
+****
+* [[VUID-XrSpaceVelocity-type-type]] pname:type must: be ename:XR_TYPE_SPACE_VELOCITY
+* [[VUID-XrSpaceVelocity-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrSpaceVelocity-velocityFlags-parameter]] pname:velocityFlags must: be `0` or a valid combination of elink:XrSpaceVelocityFlagBits values
+****
+
+--
+
+[open,refpage='XrSpaceVelocityFlags',desc='Space velocity flags',type='flags',xrefs='XrSpaceVelocity']
+--
+The pname:velocityFlags member is a bitwise-OR of zero or more of the
+following flags:
+
+// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
+[[XrSpaceVelocityFlagBits,XrSpaceVelocityFlagBits]]
+[source,c++]
+----
+// Flag bits for XrSpaceVelocityFlags
+static const XrSpaceVelocityFlags XR_SPACE_VELOCITY_LINEAR_VALID_BIT = 0x00000001;
+static const XrSpaceVelocityFlags XR_SPACE_VELOCITY_ANGULAR_VALID_BIT = 0x00000002;
+
+----
+
+where the flags have the following meaning:
+
+.Flag Descriptions
+****
+* ename:XR_SPACE_VELOCITY_LINEAR_VALID_BIT indicates that the
+ pname:linearVelocity field contains valid data.
+* ename:XR_SPACE_VELOCITY_ANGULAR_VALID_BIT indicates that the
+ pname:angularVelocity field contains valid data.
+****
+--
+
+
[[view_configurations]]
== View Configurations
@@ -5360,7 +5569,7 @@ fallback.
View configurations are identified with an elink:XrViewConfigurationType.
-[[primary_view_configurations]]
+[[view_configuration_type]]
=== Primary View Configurations
[open,refpage='XrViewConfigurationType',desc='Supported view configuration type',type='enums']
@@ -5372,6 +5581,7 @@ View configurations are identified with an elink:XrViewConfigurationType.
typedef enum XrViewConfigurationType {
XR_VIEW_CONFIGURATION_TYPE_PRIMARY_MONO = 1,
XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO = 2,
+ XR_VIEW_CONFIGURATION_TYPE_PRIMARY_QUAD_VARJO = 1000037000,
XR_VIEW_CONFIGURATION_TYPE_MAX_ENUM = 0x7FFFFFFF
} XrViewConfigurationType;
----
@@ -5421,7 +5631,7 @@ each view configuration type and its individual views.
[open,refpage='xrEnumerateViewConfigurations',desc='Enumerates supported view configurations',type='protos',xrefs='XrViewConfigurationType']
--
-The flink:xrEnumerateViewConfigurations is defined as follows:
+The flink:xrEnumerateViewConfigurations function is defined as:
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[xrEnumerateViewConfigurations,xrEnumerateViewConfigurations]]
@@ -5463,13 +5673,15 @@ what the runtime considered highest to lowest user preference.
Thus the first enumerated view configuration type should: be the one the
runtime prefers the application to use if possible.
+Runtimes must: always return identical buffer contents from this enumeration
+for the given pname:systemId and for the lifetime of the instance.
+
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
* [[VUID-xrEnumerateViewConfigurations-instance-parameter]] pname:instance must: be a valid slink:XrInstance handle
-* [[VUID-xrEnumerateViewConfigurations-viewConfigurationTypeCapacityInput-parameter]] If pname:viewConfigurationTypeCapacityInput is not `0`, pname:viewConfigurationTypeCapacityInput must: be a valid code:uint32_t value
-* [[VUID-xrEnumerateViewConfigurations-viewConfigurationTypeCountOutput-parameter]] If pname:viewConfigurationTypeCountOutput is not code:NULL, pname:viewConfigurationTypeCountOutput must: be a pointer to a code:uint32_t value
-* [[VUID-xrEnumerateViewConfigurations-viewConfigurationTypes-parameter]] If pname:viewConfigurationTypeCapacityInput is not `0`, pname:viewConfigurationTypes must: be a pointer to an array of pname:viewConfigurationTypeCapacityInput slink:XrViewConfigurationType values
+* [[VUID-xrEnumerateViewConfigurations-viewConfigurationTypeCountOutput-parameter]] pname:viewConfigurationTypeCountOutput must: be a pointer to a code:uint32_t value
+* [[VUID-xrEnumerateViewConfigurations-viewConfigurationTypes-parameter]] If pname:viewConfigurationTypeCapacityInput is not `0`, pname:viewConfigurationTypes must: be a pointer to an array of pname:viewConfigurationTypeCapacityInput elink:XrViewConfigurationType values
****
.Return Codes
@@ -5526,7 +5738,7 @@ runtime must: return ename:XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED.
.Valid Usage (Implicit)
****
* [[VUID-xrGetViewConfigurationProperties-instance-parameter]] pname:instance must: be a valid slink:XrInstance handle
-* [[VUID-xrGetViewConfigurationProperties-viewConfigurationType-parameter]] pname:viewConfigurationType must: be a valid slink:XrViewConfigurationType value
+* [[VUID-xrGetViewConfigurationProperties-viewConfigurationType-parameter]] pname:viewConfigurationType must: be a valid elink:XrViewConfigurationType value
* [[VUID-xrGetViewConfigurationProperties-configurationProperties-parameter]] pname:configurationProperties must: be a pointer to an slink:XrViewConfigurationProperties structure
****
@@ -5557,7 +5769,7 @@ The slink:XrViewConfigurationProperties structure is defined as:
----
typedef struct XrViewConfigurationProperties {
XrStructureType type;
- void* XR_MAY_ALIAS next;
+ void* next;
XrViewConfigurationType viewConfigurationType;
XrBool32 fovMutable;
} XrViewConfigurationProperties;
@@ -5577,8 +5789,8 @@ typedef struct XrViewConfigurationProperties {
.Valid Usage (Implicit)
****
* [[VUID-XrViewConfigurationProperties-type-type]] pname:type must: be ename:XR_TYPE_VIEW_CONFIGURATION_PROPERTIES
-* [[VUID-XrViewConfigurationProperties-next-next]] pname:next must: be code:NULL
-* [[VUID-XrViewConfigurationProperties-viewConfigurationType-parameter]] pname:viewConfigurationType must: be a valid slink:XrViewConfigurationType value
+* [[VUID-XrViewConfigurationProperties-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrViewConfigurationProperties-viewConfigurationType-parameter]] pname:viewConfigurationType must: be a valid elink:XrViewConfigurationType value
****
--
@@ -5587,7 +5799,7 @@ typedef struct XrViewConfigurationProperties {
[open,refpage='xrEnumerateViewConfigurationViews',desc='Gets view configuration views',type='protos',xrefs='XrViewConfigurationType xrGetViewConfigurationProperties XrViewConfigurationView']
--
-The function flink:xrEnumerateViewConfigurationViews is defined as:
+The flink:xrEnumerateViewConfigurationViews function is defined as:
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[xrEnumerateViewConfigurationViews,xrEnumerateViewConfigurationViews]]
@@ -5626,13 +5838,16 @@ If the supplied pname:viewConfigurationType is not supported by this
slink:XrInstance and basetype:XrSystemId, the runtime must: return
ename:XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED.
+Runtimes must: always return identical buffer contents from this enumeration
+for the given pname:systemId and pname:viewConfigurationType for the
+lifetime of the instance.
+
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
* [[VUID-xrEnumerateViewConfigurationViews-instance-parameter]] pname:instance must: be a valid slink:XrInstance handle
-* [[VUID-xrEnumerateViewConfigurationViews-viewConfigurationType-parameter]] pname:viewConfigurationType must: be a valid slink:XrViewConfigurationType value
-* [[VUID-xrEnumerateViewConfigurationViews-viewCapacityInput-parameter]] If pname:viewCapacityInput is not `0`, pname:viewCapacityInput must: be a valid code:uint32_t value
-* [[VUID-xrEnumerateViewConfigurationViews-viewCountOutput-parameter]] If pname:viewCountOutput is not code:NULL, pname:viewCountOutput must: be a pointer to a code:uint32_t value
+* [[VUID-xrEnumerateViewConfigurationViews-viewConfigurationType-parameter]] pname:viewConfigurationType must: be a valid elink:XrViewConfigurationType value
+* [[VUID-xrEnumerateViewConfigurationViews-viewCountOutput-parameter]] pname:viewCountOutput must: be a pointer to a code:uint32_t value
* [[VUID-xrEnumerateViewConfigurationViews-views-parameter]] If pname:viewCapacityInput is not `0`, pname:views must: be a pointer to an array of pname:viewCapacityInput slink:XrViewConfigurationView structures
****
@@ -5665,14 +5880,14 @@ The slink:XrViewConfigurationView structure is defined as:
[source,c++]
----
typedef struct XrViewConfigurationView {
- XrStructureType type;
- void* XR_MAY_ALIAS next;
- uint32_t recommendedImageRectWidth;
- uint32_t maxImageRectWidth;
- uint32_t recommendedImageRectHeight;
- uint32_t maxImageRectHeight;
- uint32_t recommendedSwapchainSampleCount;
- uint32_t maxSwapchainSampleCount;
+ XrStructureType type;
+ void* next;
+ uint32_t recommendedImageRectWidth;
+ uint32_t maxImageRectWidth;
+ uint32_t recommendedImageRectHeight;
+ uint32_t maxImageRectHeight;
+ uint32_t recommendedSwapchainSampleCount;
+ uint32_t maxSwapchainSampleCount;
} XrViewConfigurationView;
----
@@ -5701,7 +5916,7 @@ values, and slink:XrSwapchainCreateInfo for more information about creating
swapchains appropriately sized to support those pname:imageRect values.
The array of slink:XrViewConfigurationView returned by the runtime must:
-adhere to the rules defined in <<primary_view_configurations,
+adhere to the rules defined in <<view_configuration_type,
elink:XrViewConfigurationType>>, such as the count and association to the
left and right eyes.
@@ -5709,13 +5924,7 @@ left and right eyes.
.Valid Usage (Implicit)
****
* [[VUID-XrViewConfigurationView-type-type]] pname:type must: be ename:XR_TYPE_VIEW_CONFIGURATION_VIEW
-* [[VUID-XrViewConfigurationView-next-next]] pname:next must: be code:NULL
-* [[VUID-XrViewConfigurationView-recommendedImageRectWidth-parameter]] pname:recommendedImageRectWidth must: be a valid code:uint32_t value
-* [[VUID-XrViewConfigurationView-maxImageRectWidth-parameter]] pname:maxImageRectWidth must: be a valid code:uint32_t value
-* [[VUID-XrViewConfigurationView-recommendedImageRectHeight-parameter]] pname:recommendedImageRectHeight must: be a valid code:uint32_t value
-* [[VUID-XrViewConfigurationView-maxImageRectHeight-parameter]] pname:maxImageRectHeight must: be a valid code:uint32_t value
-* [[VUID-XrViewConfigurationView-recommendedSwapchainSampleCount-parameter]] pname:recommendedSwapchainSampleCount must: be a valid code:uint32_t value
-* [[VUID-XrViewConfigurationView-maxSwapchainSampleCount-parameter]] pname:maxSwapchainSampleCount must: be a valid code:uint32_t value
+* [[VUID-XrViewConfigurationView-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
@@ -5827,26 +6036,62 @@ XR_DEFINE_HANDLE(XrSession)
A session represents an application's intention to display XR content to the
user.
-An application makes its XR content eligible to be displayed by beginning a
-session with flink:xrBeginSession, causing it to enter the running state.
-It may then hide its XR content for some period by ending its session with
-flink:xrEndSession, causing it to leave the running state.
+
+First, the application creates a session by choosing a <<system, system>>
+and a graphics API and calling flink:xrCreateSession, which creates a
+session in the ename:XR_SESSION_STATE_IDLE state.
+The application then sets up an flink:xrPollEvent loop to monitor for
+session state changes delivered through the
+slink:XrEventDataSessionStateChanged event.
+When the runtime determines that the system is ready to start transitioning
+to this session's XR content, it notifies the application that its session
+has moved into the ename:XR_SESSION_STATE_READY state.
+When the application is ready to proceed and display its XR content, it
+calls flink:xrBeginSession, which starts its session running.
+While the session is running, the application is expected to continuously
+run its frame loop by calling flink:xrWaitFrame, flink:xrBeginFrame and
+flink:xrEndFrame each frame, to establish synchronization with the runtime.
+Once the runtime is synchronized with the application's frame loop and ready
+to display its frames, the session will move into the
+ename:XR_SESSION_STATE_SYNCHRONIZED state.
+For frames where flink:xrWaitFrame returns an slink:XrFrameState with
+pname:shouldRender set to true, the app should render its composition layers
+and submit them to flink:xrEndFrame.
+If the application desires to leave a running session, it should call the
+flink:xrRequestExitSession function to request that the runtime transition
+its session to the ename:XR_SESSION_STATE_STOPPING state as soon as
+possible.
+Once the app reaches the ename:XR_SESSION_STATE_STOPPING state, it can call
+flink:xrEndSession to stop the XR session, after which the session will
+transition through ename:XR_SESSION_STATE_IDLE to the
+ename:XR_SESSION_STATE_EXITING state.
+
+[[session_running]]A session is considered **running** after a successful
+call to flink:xrBeginSession and remains running until any call is made to
+flink:xrEndSession.
+Certain functions are only valid to call when a session is running, such as
+flink:xrWaitFrame, or else the ename:XR_ERROR_SESSION_NOT_RUNNING error
+must: be returned by the runtime.
+
+[[session_not_running]]A session is considered **not running** before a
+successful call to flink:xrBeginSession and becomes not running again after
+any call is made to flink:xrEndSession.
+Certain functions are only valid to call when a session is not running, such
+as flink:xrBeginSession, or else the ename:XR_ERROR_SESSION_RUNNING error
+must: be returned by the runtime.
+
+If an error is returned from flink:xrBeginSession, the session remains in
+its current running or not running state.
+Calling flink:xrEndSession always transitions a session to the not running
+state, regardless of any errors returned.
Only running sessions may become focused sessions that receive XR input.
-When a session is not running, the application must: not submit frames.
+When a session <<session_not_running, is not running>>, the application
+must: not submit frames.
This is important because without a running session, the runtime no longer
has to spend resources on sub-systems (tracking etc.) that are no longer
needed by the application.
-A session may be running but not currently visible, as another running
-session may take precedence.
-The slink:XrEventDataSessionStateChanged event indicates changes to
-visibility or input focus states.
-Runtimes each establish their own policy for when an application has the
-right to make its running session visible in the XR display.
-
-An application must: set the current view configuration and supported view
-configurations before calling flink:xrBeginSession.
--
[[session-lifecycle]]
@@ -5859,9 +6104,9 @@ number of extensions of which each runtime can support any subset.
These extensions can be activated during slink:XrInstance create time.
During slink:XrSession creation the application must: provide information
-about which graphics API it intends to use by adding a struct of one (and
-only one) of the enabled graphics API extensions to the next chain of
-slink:XrSessionCreateInfo.
+about which graphics API it intends to use by adding an XrGraphicsBinding...
+struct of one (and only one) of the enabled graphics API extensions to the
+next chain of slink:XrSessionCreateInfo.
Unless specified differently in the graphics API extension, the application
is responsible for creating a valid graphics device binding (for details
refer to the extension specification of the graphics API).
@@ -5882,12 +6127,11 @@ XrResult xrCreateSession(
.Parameter Descriptions
****
-* pname:instance is the instance from which
- slink:XrSessionCreateInfo::pname:systemId was retrieved.
+* pname:instance is the instance from which pname:systemId was retrieved.
* pname:createInfo is a pointer to an slink:XrSessionCreateInfo structure
-containing information about how to create the session.
+ containing information about how to create the session.
* pname:session is a pointer to a handle in which the created
-slink:XrSession is returned.
+ slink:XrSession is returned.
****
Creates a session using the provided pname:createInfo and returns a handle
@@ -5929,18 +6173,17 @@ The slink:XrSessionCreateInfo structure is defined as:
[source,c++]
----
typedef struct XrSessionCreateInfo {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- XrSessionCreateFlags createFlags;
- XrSystemId systemId;
+ XrStructureType type;
+ const void* next;
+ XrSessionCreateFlags createFlags;
+ XrSystemId systemId;
} XrSessionCreateInfo;
----
.Member Descriptions
****
* pname:type is the elink:XrStructureType of this structure.
-* pname:next is code:NULL or is a pointer to an extension-specific
- structure.
+* pname:next is code:NULL or a pointer to an extension-specific structure.
Note that in most cases one graphics API extension specific struct needs
to be in this next chain.
* pname:createFlags identifies elink:XrSessionCreateFlags that apply to the
@@ -5952,20 +6195,19 @@ typedef struct XrSessionCreateInfo {
.Valid Usage
****
* pname:systemId must: be a valid basetype:XrSystemId or
- ename:XR_ERROR_SYSTEM_INVALID will be returned.
+ ename:XR_ERROR_SYSTEM_INVALID must: be returned.
* pname:next, unless otherwise specified via an extension, must: contain
exactly one graphics API binding structure (a structure whose name begins
- with `"XrGraphicsBinding"`) or ename:XR_ERROR_GRAPHICS_DEVICE_INVALID will
- be returned.
+ with `"XrGraphicsBinding"`) or ename:XR_ERROR_GRAPHICS_DEVICE_INVALID
+ must: be returned.
****
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
* [[VUID-XrSessionCreateInfo-type-type]] pname:type must: be ename:XR_TYPE_SESSION_CREATE_INFO
-* [[VUID-XrSessionCreateInfo-next-next]] Each pname:next member of any structure (including this one) in the pname:next chain must: be either code:NULL or a pointer to a valid instance of slink:XrGraphicsBindingD3D10KHR, slink:XrGraphicsBindingD3D11KHR, slink:XrGraphicsBindingD3D12KHR, slink:XrGraphicsBindingOpenGLESAndroidKHR, slink:XrGraphicsBindingOpenGLWaylandKHR, slink:XrGraphicsBindingOpenGLWin32KHR, slink:XrGraphicsBindingOpenGLXcbKHR, slink:XrGraphicsBindingOpenGLXlibKHR, or slink:XrGraphicsBindingVulkanKHR
-* [[VUID-XrSessionCreateInfo-next-unique]] Each pname:type member in the pname:next chain must: be unique
-* [[VUID-XrSessionCreateInfo-createFlags-parameter]] pname:createFlags must: be 0 or a valid combination of elink:XrSessionCreateFlagBits values
+* [[VUID-XrSessionCreateInfo-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>. See also: slink:XrGraphicsBindingD3D11KHR, slink:XrGraphicsBindingD3D12KHR, slink:XrGraphicsBindingOpenGLESAndroidKHR, slink:XrGraphicsBindingOpenGLWaylandKHR, slink:XrGraphicsBindingOpenGLWin32KHR, slink:XrGraphicsBindingOpenGLXcbKHR, slink:XrGraphicsBindingOpenGLXlibKHR, slink:XrGraphicsBindingVulkanKHR
+* [[VUID-XrSessionCreateInfo-createFlags-parameter]] pname:createFlags must: be `0` or a valid combination of elink:XrSessionCreateFlagBits values
****
--
@@ -6006,33 +6248,36 @@ XrResult xrDestroySession(
slink:XrSession handles are destroyed using flink:xrDestroySession.
When an slink:XrSession is destroyed, all handles that are children of that
slink:XrSession are also destroyed.
-If the session is invalid the runtime must return
-ename:XR_ERROR_HANDLE_INVALID.
The application is responsible for ensuring that it has no calls using
pname:session in progress when the session is destroyed.
+flink:xrDestroySession can be called when the session is in any session
+state.
+
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
* [[VUID-xrDestroySession-session-parameter]] pname:session must: be a valid slink:XrSession handle
****
+.Thread Safety
+****
+* Access to pname:session, and any child handles, must: be externally synchronized
+****
+
.Return Codes
****
<<fundamentals-successcodes,Success>>::
* ename:XR_SUCCESS
<<fundamentals-errorcodes,Failure>>::
-* ename:XR_ERROR_INSTANCE_LOST
-* ename:XR_ERROR_RUNTIME_FAILURE
* ename:XR_ERROR_HANDLE_INVALID
-* ename:XR_ERROR_VALIDATION_FAILURE
****
--
-[[session-initialization]]
-=== Session Initialization
+[[session-control]]
+=== Session Control
[open,refpage='xrBeginSession',desc='Begins an XrSession',type='protos',xrefs='xrCreateSession xrDestroySession xrEndSession XrSessionBeginInfo']
--
@@ -6050,25 +6295,36 @@ XrResult xrBeginSession(
.Parameter Descriptions
****
* pname:session is a valid slink:XrSession handle.
-* pname:beginInfo is a pointer to an slink:XrSessionBeginInfo struct.
+* pname:beginInfo is a pointer to an slink:XrSessionBeginInfo structure.
****
-When an app begins a session, it is requesting that the runtime show its
-rendered output to the user.
-
-Note that a runtime may: decide not to show a given session's output to the
-user at any time, for example if the user has switched to a different app's
-running session.
-If the session is running but the runtime does not make the session visible,
-ename:XR_SESSION_VISIBILITY_UNAVAILABLE must: be returned.
-The app should use the slink:XrEventDataSessionStateChanged event to
-determine when this session is visible to the user and is focused to receive
-input.
+When the application receives slink:XrEventDataSessionStateChanged event
+with the ename:XR_SESSION_STATE_READY state, the application should: then
+call flink:xrBeginSession to start rendering frames for display to the user.
+
+After this function successfully returns, the session <<session_running, is
+considered to be running>>.
+The application should: then start its frame loop consisting of some
+sequence of flink:xrWaitFrame/flink:xrBeginFrame/flink:xrEndFrame calls.
+
+If the session <<session_running, is already running>> when the application
+calls flink:xrBeginSession, the runtime must: return error
+ename:XR_ERROR_SESSION_RUNNING.
+If the session <<session_not_running, is not running>> when the application
+calls flink:xrBeginSession, but the session is not yet in the
+ename:XR_SESSION_STATE_READY state, the runtime must: return error
+ename:XR_ERROR_SESSION_NOT_READY.
+
+Note that a runtime may: decide not to show the user any given frame from a
+session at any time, for example if the user has switched to a different
+application's running session.
+The application should check whether flink:xrWaitFrame returns an
+slink:XrFrameState with pname:shouldRender set to true before rendering a
+given frame to determine whether that frame will be visible to the user.
+
If pname:primaryViewConfigurationType in pname:beginInfo is not supported by
-the slink:XrInstance that created pname:session the runtime must: return
-ename:XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED.
-If a session was already begun for pname:session, then the runtime must:
-return ename:XR_ERROR_SESSION_RUNNING.
+the basetype:XrSystemId used to create the pname:session, the runtime must:
+return ename:XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
@@ -6081,7 +6337,6 @@ return ename:XR_ERROR_SESSION_RUNNING.
****
<<fundamentals-successcodes,Success>>::
* ename:XR_SUCCESS
-* ename:XR_SESSION_VISIBILITY_UNAVAILABLE
* ename:XR_SESSION_LOSS_PENDING
<<fundamentals-errorcodes,Failure>>::
* ename:XR_ERROR_INSTANCE_LOST
@@ -6089,6 +6344,7 @@ return ename:XR_ERROR_SESSION_RUNNING.
* ename:XR_ERROR_RUNTIME_FAILURE
* ename:XR_ERROR_HANDLE_INVALID
* ename:XR_ERROR_VALIDATION_FAILURE
+* ename:XR_ERROR_SESSION_NOT_READY
* ename:XR_ERROR_SESSION_RUNNING
* ename:XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED
****
@@ -6104,9 +6360,9 @@ The slink:XrSessionBeginInfo structure is defined as:
[source,c++]
----
typedef struct XrSessionBeginInfo {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- XrViewConfigurationType primaryViewConfigurationType;
+ XrStructureType type;
+ const void* next;
+ XrViewConfigurationType primaryViewConfigurationType;
} XrSessionBeginInfo;
----
@@ -6123,8 +6379,8 @@ typedef struct XrSessionBeginInfo {
.Valid Usage (Implicit)
****
* [[VUID-XrSessionBeginInfo-type-type]] pname:type must: be ename:XR_TYPE_SESSION_BEGIN_INFO
-* [[VUID-XrSessionBeginInfo-next-next]] pname:next must: be code:NULL
-* [[VUID-XrSessionBeginInfo-primaryViewConfigurationType-parameter]] pname:primaryViewConfigurationType must: be a valid slink:XrViewConfigurationType value
+* [[VUID-XrSessionBeginInfo-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrSessionBeginInfo-primaryViewConfigurationType-parameter]] pname:primaryViewConfigurationType must: be a valid elink:XrViewConfigurationType value
****
--
@@ -6143,14 +6399,36 @@ XrResult xrEndSession(
.Parameter Descriptions
****
-* pname:session is a handle to a running slink:XrSession.
+* pname:session is a handle to a <<session_running, running>>
+ slink:XrSession.
****
-The application calls flink:xrEndSession to end a running session.
-This function signals to the runtime that the application no longer wishes
-to display rendered output, read input state, or control haptic events.
-If this pname:session was not running, then
-ename:XR_ERROR_SESSION_NOT_RUNNING will be returned.
+When the application receives slink:XrEventDataSessionStateChanged event
+with the ename:XR_SESSION_STATE_STOPPING state, the application should stop
+its frame loop and then call flink:xrEndSession to end the
+<<session_running, running>> session.
+This function signals to the runtime that the application will no longer
+call flink:xrWaitFrame, flink:xrBeginFrame or flink:xrEndFrame from any
+thread.
+The application must: also avoid reading input state or sending haptic
+output after calling flink:xrEndSession.
+
+If the session <<session_not_running, is not running>> when the application
+calls flink:xrEndSession, the runtime must: return error
+ename:XR_ERROR_SESSION_NOT_RUNNING.
+If the session <<session_running, is still running>> when the application
+calls flink:xrEndSession, but the session is not yet in the
+ename:XR_SESSION_STATE_STOPPING state, the runtime must: return error
+ename:XR_ERROR_SESSION_NOT_STOPPING.
+
+If the application wishes to exit a session that is running but not in the
+ename:XR_SESSION_STATE_STOPPING state, the application should call
+flink:xrRequestExitSession.
+This requests that the runtime transition to the
+ename:XR_SESSION_STATE_STOPPING state, so that the application can call
+flink:xrEndSession, after which the session will transition through
+ename:XR_SESSION_STATE_IDLE to the ename:XR_SESSION_STATE_EXITING state and
+quit the XR experience seamlessly.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
@@ -6168,14 +6446,70 @@ ename:XR_ERROR_SESSION_NOT_RUNNING will be returned.
* ename:XR_ERROR_SESSION_LOST
* ename:XR_ERROR_RUNTIME_FAILURE
* ename:XR_ERROR_HANDLE_INVALID
+* ename:XR_ERROR_SESSION_NOT_STOPPING
* ename:XR_ERROR_SESSION_NOT_RUNNING
* ename:XR_ERROR_VALIDATION_FAILURE
****
--
-[[session-lifecycle-states]]
-=== Session Lifecycle States
+[open,refpage='xrRequestExitSession',desc='Request to exit a running session.',type='protos',xrefs='xrDestroySession xrEndSession']
+--
+The flink:xrRequestExitSession function is defined as:
+
+// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
+[[xrRequestExitSession,xrRequestExitSession]]
+[source,c++]
+----
+XrResult xrRequestExitSession(
+ XrSession session);
+----
+
+.Parameter Descriptions
+****
+* pname:session is a handle to a running slink:XrSession.
+****
+
+An application can only call flink:xrEndSession when the session is in the
+ename:XR_SESSION_STATE_STOPPING state, which allows runtimes to seamlessly
+transition from one application's session to another.
+When an application wishes to exit a <<session_running, running>> session,
+the application can call flink:xrRequestExitSession, requesting that the
+runtime transition the session to the ename:XR_SESSION_STATE_STOPPING state.
+When the application receives an slink:XrEventDataSessionStateChanged event
+indicating that the session has reached the ename:XR_SESSION_STATE_STOPPING
+state, the application can then call flink:xrEndSession to quit the XR
+experience seamlessly, transitioning the session through
+ename:XR_SESSION_STATE_IDLE to the ename:XR_SESSION_STATE_EXITING state.
+
+If pname:session <<session_not_running, is not running>> when
+flink:xrRequestExitSession is called, ename:XR_ERROR_SESSION_NOT_RUNNING
+must: be returned.
+
+// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
+.Valid Usage (Implicit)
+****
+* [[VUID-xrRequestExitSession-session-parameter]] pname:session must: be a valid slink:XrSession handle
+****
+
+.Return Codes
+****
+<<fundamentals-successcodes,Success>>::
+* ename:XR_SUCCESS
+* ename:XR_SESSION_LOSS_PENDING
+<<fundamentals-errorcodes,Failure>>::
+* ename:XR_ERROR_INSTANCE_LOST
+* ename:XR_ERROR_SESSION_LOST
+* ename:XR_ERROR_RUNTIME_FAILURE
+* ename:XR_ERROR_HANDLE_INVALID
+* ename:XR_ERROR_SESSION_NOT_RUNNING
+* ename:XR_ERROR_VALIDATION_FAILURE
+****
+
+--
+
+[[session-states]]
+=== Session States
image::images/lifecycle.svg[align="center", title="Session Life-cycle"]
@@ -6195,11 +6529,11 @@ The slink:XrEventDataSessionStateChanged structure is defined as:
[source,c++]
----
typedef struct XrEventDataSessionStateChanged {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- XrSession session;
- XrSessionState state;
- XrTime time;
+ XrStructureType type;
+ const void* next;
+ XrSession session;
+ XrSessionState state;
+ XrTime time;
} XrEventDataSessionStateChanged;
----
@@ -6220,9 +6554,9 @@ that the application has changed lifecycle state.
.Valid Usage (Implicit)
****
* [[VUID-XrEventDataSessionStateChanged-type-type]] pname:type must: be ename:XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED
-* [[VUID-XrEventDataSessionStateChanged-next-next]] pname:next must: be code:NULL
+* [[VUID-XrEventDataSessionStateChanged-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
* [[VUID-XrEventDataSessionStateChanged-session-parameter]] pname:session must: be a valid slink:XrSession handle
-* [[VUID-XrEventDataSessionStateChanged-state-parameter]] pname:state must: be a valid slink:XrSessionState value
+* [[VUID-XrEventDataSessionStateChanged-state-parameter]] pname:state must: be a valid elink:XrSessionState value
****
--
@@ -6239,7 +6573,7 @@ typedef enum XrSessionState {
XR_SESSION_STATE_UNKNOWN = 0,
XR_SESSION_STATE_IDLE = 1,
XR_SESSION_STATE_READY = 2,
- XR_SESSION_STATE_RUNNING = 3,
+ XR_SESSION_STATE_SYNCHRONIZED = 3,
XR_SESSION_STATE_VISIBLE = 4,
XR_SESSION_STATE_FOCUSED = 5,
XR_SESSION_STATE_STOPPING = 6,
@@ -6259,18 +6593,23 @@ typedef enum XrSessionState {
The initial state after calling flink:xrCreateSession or returned to after
calling flink:xrEndSession.
* ename:XR_SESSION_STATE_READY.
- The application is ready to call flink:xrBeginSession.
-* ename:XR_SESSION_STATE_RUNNING.
- The application should run the
- flink:xrWaitFrame/flink:xrBeginFrame/flink:xrEndFrame loop.
+ The application is ready to call flink:xrBeginSession and sync its frame
+ loop with the runtime.
+* ename:XR_SESSION_STATE_SYNCHRONIZED.
+ The application has synced its frame loop with the runtime but is not
+ visible to the user.
* ename:XR_SESSION_STATE_VISIBLE.
- The application should render everything except input avatars.
+ The application has synced its frame loop with the runtime and is visible
+ to the user but cannot receive XR input.
* ename:XR_SESSION_STATE_FOCUSED.
- The application should render everything and process input.
+ The application has synced its frame loop with the runtime, is visible to
+ the user and can receive XR input.
* ename:XR_SESSION_STATE_STOPPING.
- The application should exit the render loop and call flink:xrEndSession.
+ The application should exit its frame loop and call flink:xrEndSession.
* ename:XR_SESSION_STATE_LOSS_PENDING.
The session is in the process of being lost.
+ The application should destroy the current session and can optionally
+ recreate it.
* ename:XR_SESSION_STATE_EXITING.
The application should end its XR experience and not automatically restart
it.
@@ -6285,61 +6624,84 @@ Applications in this state should: minimize resource consumption but
continue to call flink:xrPollEvent at some reasonable cadence.
Receiving the ename:XR_SESSION_STATE_READY state indicates that the runtime
-desires the application to prepare rendering resources, call
-flink:xrBeginSession, and start its rendering loop.
-The rendering loop should: consist of some sequence of
-flink:xrWaitFrame/flink:xrBeginFrame/flink:xrEndFrame calls.
-An application should: avoid heavy GPU work until reaching the
-ename:XR_SESSION_STATE_VISIBLE state to avoid contention with other
-applications which may still possibly be running.
+desires the application to prepare rendering resources, begin its session
+and synchronize its frame loop with the runtime.
+The application does this by successfully calling flink:xrBeginSession and
+then running its frame loop by calling flink:xrWaitFrame, flink:xrBeginFrame
+and flink:xrEndFrame in a loop.
+If the runtime wishes to return the session to the
+ename:XR_SESSION_STATE_IDLE state, it must: wait until the app calls
+flink:xrBeginSession.
+After returning from the flink:xrBeginSession call, the runtime may then
+immediately transition forward through the
+ename:XR_SESSION_STATE_SYNCHRONIZED state to the
+ename:XR_SESSION_STATE_STOPPING state, to request that the application end
+this session.
+If the system supports a user engagement sensor and runtime is in
+ename:XR_SESSION_STATE_IDLE state, the runtime should: not transition to the
+ename:XR_SESSION_STATE_READY state until the user starts engaging with the
+device.
-Receiving the ename:XR_SESSION_STATE_RUNNING state indicates that the
-runtime has detected the applications rendering loop and properly
-synchronized it with the display's refresh cycle.
-Achieving synchronization prior to entering the
-ename:XR_SESSION_STATE_VISIBLE state facilitates switching between
-applications on a display frame boundary.
+Receiving the ename:XR_SESSION_STATE_SYNCHRONIZED state indicates that the
+application has synchronized its frame loop with the runtime, but its frames
+are not visible to the user.
+The application should: continue running its frame loop by calling
+flink:xrWaitFrame, flink:xrBeginFrame and flink:xrEndFrame, although it
+should avoid heavy GPU work so that other visible applications can take CPU
+and GPU precedence.
+The application can save resources here by skipping rendering and not
+submitting any composition layers until flink:xrWaitFrame returns an
+slink:XrFrameState with pname:shouldRender set to true.
+A runtime may: use this frame synchronization to facilitate seamless
+switching from a previous XR application to this application on a frame
+boundary.
Receiving the ename:XR_SESSION_STATE_VISIBLE state indicates that the
-session is visible.
-This can occur in many cases, one typical example is when a user switches
-from one OpenXR application to the current one.
-Applications that become visible should respond by simulating and submitting
-frames.
-Applications that lose visibility should stop submitting frames in order to
-give CPU and GPU precedence to any other applications that need it.
-This is a temporary event and usually indicates that either the user or the
-runtime process has determine the session should be placed on the back
-burner but may be brought back into visibility shortly.
-
-Receiving the ename:XR_SESSION_STATE_FOCUSED state indicates the application
-is able to receive user input.
-If a session is focused it receives all input from a user.
-On the other hand, if a session does not have focus, it may: receive no user
-input.
-The runtime must: guarantee that at most one application has input focus at
-any given time.
+application has synchronized its frame loop with the runtime, and the
+session's frames will be visible to the user, but the session is not
+eligible to receive XR input.
An application may be visible but not have focus, for example when the
runtime is composing a modal pop-up on top of the application's rendered
frames.
-It is important for apps to continue rendering when visible even when they
-do not have focus.
-Applications should: only render input avatars (depictions of hands or other
-tracked objects controlled by the user) when in the
-ename:XR_SESSION_STATE_FOCUSED state.
-The runtime must: not render input avatars when an application is focused.
+The application should: continue running its frame loop, rendering and
+submitting its composition layers, although it may wish to pause its
+experience, as users cannot interact with the application at this time.
+It is important for apps to continue rendering when visible, even when they
+do not have focus, so the user continues to see something reasonable
+underneath modal pop-ups.
+Runtimes should: make input actions inactive during while the app is
+unfocused, and apps should react to an inactive input action by skipping
+rendering of that action's input avatar (depictions of hands or other
+tracked objects controlled by the user).
+
+Receiving the ename:XR_SESSION_STATE_FOCUSED state indicates that the
+application has synchronized its frame loop with the runtime, the session's
+frames will be visible to the user, and the session is eligible to receive
+XR input.
+The runtime should: only give one session XR input focus at any given time.
+The application should: be running its frame loop, rendering and submitting
+composition layers, including input avatars (depictions of hands or other
+tracked objects controlled by the user) for any input actions that are
+active.
+The runtime should: avoid rendering its own input avatars when an
+application is focused, unless input from a given source is being captured
+by the runtime at the moment.
Receiving the ename:XR_SESSION_STATE_STOPPING state indicates that the
runtime has determined that the application should halt its rendering loop.
-A possible reason for this would be to minimize contention between multiple
-applications.
Applications should: exit their rendering loop and call flink:xrEndSession
when in this state.
+A possible reason for this would be to minimize contention between multiple
+applications.
+If the system supports a user engagement sensor and the session is running,
+the runtime should: transition to the ename:XR_SESSION_STATE_STOPPING state
+when the user stops engaging with the device.
Receiving the ename:XR_SESSION_STATE_EXITING state indicates the runtime
wishes the application to terminate its XR experience, typically due to a
user request via a runtime user interface.
-Applications should: gracefully end their process when in this state.
+Applications should: gracefully end their process when in this state if they
+do not have a non-XR user experience.
Receiving the ename:XR_SESSION_STATE_LOSS_PENDING state indicates the
runtime is no longer able to operate with the current session, for example
@@ -6356,8 +6718,8 @@ unspecified grace period of time, and the functions that return it simulate
success in their behavior.
If the runtime has no reasonable way to successfully complete a given
function (e.g. flink:xrCreateSwapchain) when a lost session is pending, or
-if the runtime is not able to provide the app a grace period, the runtime
-may: return ename:XR_ERROR_SESSION_LOST.
+if the runtime is not able to provide the application a grace period, the
+runtime may: return ename:XR_ERROR_SESSION_LOST.
Thereafter, functions which accept slink:XrSession parameters for the lost
session may: return ename:XR_ERROR_SESSION_LOST to indicate that the
function failed and the given session was lost.
@@ -6413,7 +6775,7 @@ the runtime will use the application-specified format for reading the data.
[open,refpage='xrEnumerateSwapchainFormats',desc='Enumerates swapchain formats',type='protos',xrefs='xrCreateSwapchain']
--
-The flink:xrEnumerateSwapchainFormats is defined as:
+The flink:xrEnumerateSwapchainFormats function is defined as:
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[xrEnumerateSwapchainFormats,xrEnumerateSwapchainFormats]]
@@ -6430,13 +6792,13 @@ XrResult xrEnumerateSwapchainFormats(
****
* pname:session is the session that enumerates the supported formats.
* pname:formatCapacityInput is the capacity of the pname:formats, or 0 to
-retrieve the required capacity.
+ retrieve the required capacity.
* pname:formatCountOutput is a pointer to the count of code:uint64_t formats
-written, or a pointer to the required capacity in the case that
-pname:formatCapacityInput is 0.
+ written, or a pointer to the required capacity in the case that
+ pname:formatCapacityInput is `0`.
* pname:formats is a pointer to an array of code:int64_t format ids, but
-can: be code:NULL if pname:formatCapacityInput is 0.
-The format ids are specific to the specified graphics API.
+ can: be code:NULL if pname:formatCapacityInput is `0`.
+ The format ids are specific to the specified graphics API.
* See <<buffer-size-parameters, Buffer Size Parameters>> chapter for a
detailed description of retrieving the required pname:formats size.
****
@@ -6448,6 +6810,8 @@ flink:xrCreateSession.
For example, if a DirectX graphics API was specified, then the enumerated
formats correspond to the DXGI formats, such as
ename:DXGI_FORMAT_R8G8B8A8_UNORM_SRGB.
+Texture formats should: be in order from highest to lowest runtime
+preference.
With an OpenGL-based graphics API, the texture formats correspond to OpenGL
internal formats.
@@ -6457,12 +6821,14 @@ returns typeless formats (e.g. ename:DXGI_FORMAT_R8G8B8A8_TYPELESS).
Only concrete formats are returned, and only concrete formats may be
specified by applications for swapchain creation.
+Runtimes must: always return identical buffer contents from this enumeration
+for the lifetime of the session.
+
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
* [[VUID-xrEnumerateSwapchainFormats-session-parameter]] pname:session must: be a valid slink:XrSession handle
-* [[VUID-xrEnumerateSwapchainFormats-formatCapacityInput-parameter]] If pname:formatCapacityInput is not `0`, pname:formatCapacityInput must: be a valid code:uint32_t value
-* [[VUID-xrEnumerateSwapchainFormats-formatCountOutput-parameter]] If pname:formatCountOutput is not code:NULL, pname:formatCountOutput must: be a pointer to a code:uint32_t value
+* [[VUID-xrEnumerateSwapchainFormats-formatCountOutput-parameter]] pname:formatCountOutput must: be a pointer to a code:uint32_t value
* [[VUID-xrEnumerateSwapchainFormats-formats-parameter]] If pname:formatCapacityInput is not `0`, pname:formats must: be a pointer to an array of pname:formatCapacityInput code:int64_t values
****
@@ -6546,9 +6912,9 @@ XrResult xrCreateSwapchain(
****
* pname:session is the session that creates the image.
* pname:createInfo is a pointer to an slink:XrSwapchainCreateInfo structure
-containing parameters to be used to create the image.
+ containing parameters to be used to create the image.
* pname:swapchain is a pointer to a handle in which the created
-slink:XrSwapchain is returned.
+ slink:XrSwapchain is returned.
****
Creates an slink:XrSwapchain handle.
@@ -6559,6 +6925,9 @@ The slink:XrSwapchain handle must: be eventually freed via the
flink:xrDestroySwapchain function.
The runtime must: return ename:XR_ERROR_SWAPCHAIN_FORMAT_UNSUPPORTED if the
image format specified in the slink:XrSwapchainCreateInfo is unsupported.
+The runtime must: return ename:XR_ERROR_FEATURE_UNSUPPORTED if any bit of
+the create flags specified in the slink:XrSwapchainCreateInfo is
+unsupported.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
@@ -6581,6 +6950,7 @@ image format specified in the slink:XrSwapchainCreateInfo is unsupported.
* ename:XR_ERROR_HANDLE_INVALID
* ename:XR_ERROR_OUT_OF_MEMORY
* ename:XR_ERROR_SWAPCHAIN_FORMAT_UNSUPPORTED
+* ename:XR_ERROR_FEATURE_UNSUPPORTED
* ename:XR_ERROR_VALIDATION_FAILURE
****
@@ -6595,17 +6965,17 @@ The slink:XrSwapchainCreateInfo structure is defined as:
[source,c++]
----
typedef struct XrSwapchainCreateInfo {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- XrSwapchainCreateFlags createFlags;
- XrSwapchainUsageFlags usageFlags;
- int64_t format;
- uint32_t sampleCount;
- uint32_t width;
- uint32_t height;
- uint32_t faceCount;
- uint32_t arraySize;
- uint32_t mipCount;
+ XrStructureType type;
+ const void* next;
+ XrSwapchainCreateFlags createFlags;
+ XrSwapchainUsageFlags usageFlags;
+ int64_t format;
+ uint32_t sampleCount;
+ uint32_t width;
+ uint32_t height;
+ uint32_t faceCount;
+ uint32_t arraySize;
+ uint32_t mipCount;
} XrSwapchainCreateInfo;
----
@@ -6628,31 +6998,25 @@ typedef struct XrSwapchainCreateInfo {
The format identifies the format that the runtime will interpret the
texture as upon submission.
Valid formats are indicated by flink:xrEnumerateSwapchainFormats.
-* pname:sampleCount is the number of sub-data element samples in the image.
-* pname:width is the width of the image.
-* pname:height is the height of the image.
-* pname:faceCount is the number of faces, which can be either 6 (for
- cubemaps) or 1.
-* pname:arraySize is the number of array layers in the image.
+* pname:sampleCount is the number of sub-data element samples in the image,
+ must: not be `0`.
+* pname:width is the width of the image, must: not be `0`.
+* pname:height is the height of the image, must: not be `0`.
+* pname:faceCount is the number of faces, which can be either `6` (for
+ cubemaps) or `1`.
+* pname:arraySize is the number of array layers in the image or `1` for a 2D
+ image, must: not be zero.
* pname:mipCount describes the number of levels of detail available for
- minified sampling of the image.
+ minified sampling of the image, must: not be `0`.
****
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
* [[VUID-XrSwapchainCreateInfo-type-type]] pname:type must: be ename:XR_TYPE_SWAPCHAIN_CREATE_INFO
-* [[VUID-XrSwapchainCreateInfo-next-next]] pname:next must: be code:NULL
-* [[VUID-XrSwapchainCreateInfo-createFlags-parameter]] pname:createFlags must: be 0 or a valid combination of elink:XrSwapchainCreateFlagBits values
-* [[VUID-XrSwapchainCreateInfo-usageFlags-parameter]] pname:usageFlags must: be a valid combination of elink:XrSwapchainUsageFlagBits values
-* [[VUID-XrSwapchainCreateInfo-usageFlags-requiredbitmask]] pname:usageFlags must: not be `0`
-* [[VUID-XrSwapchainCreateInfo-format-parameter]] pname:format must: be a valid code:int64_t value
-* [[VUID-XrSwapchainCreateInfo-sampleCount-parameter]] pname:sampleCount must: be a valid code:uint32_t value
-* [[VUID-XrSwapchainCreateInfo-width-parameter]] pname:width must: be a valid code:uint32_t value
-* [[VUID-XrSwapchainCreateInfo-height-parameter]] pname:height must: be a valid code:uint32_t value
-* [[VUID-XrSwapchainCreateInfo-faceCount-parameter]] pname:faceCount must: be a valid code:uint32_t value
-* [[VUID-XrSwapchainCreateInfo-arraySize-parameter]] pname:arraySize must: be a valid code:uint32_t value
-* [[VUID-XrSwapchainCreateInfo-mipCount-parameter]] pname:mipCount must: be a valid code:uint32_t value
+* [[VUID-XrSwapchainCreateInfo-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrSwapchainCreateInfo-createFlags-parameter]] pname:createFlags must: be `0` or a valid combination of elink:XrSwapchainCreateFlagBits values
+* [[VUID-XrSwapchainCreateInfo-usageFlags-parameter]] pname:usageFlags must: be `0` or a valid combination of elink:XrSwapchainUsageFlagBits values
****
--
@@ -6674,16 +7038,19 @@ static const XrSwapchainCreateFlags XR_SWAPCHAIN_CREATE_STATIC_IMAGE_BIT = 0x000
.Flag Descriptions
****
* ename:XR_SWAPCHAIN_CREATE_PROTECTED_CONTENT_BIT indicates that the
-swapchain's images will be protected from CPU access, using a mechanism such
-as Vulkan protected memory.
+ swapchain's images will be protected from CPU access, using a mechanism
+ such as Vulkan protected memory.
* ename:XR_SWAPCHAIN_CREATE_STATIC_IMAGE_BIT indicates that the application
-will acquire and release only one image to this swapchain over its entire
-lifetime.
-When this flag is present, runtimes should: allocate fewer images than for
-regular swapchains to reduce memory use.
+ will acquire and release only one image to this swapchain over its entire
+ lifetime.
+ When this flag is present, runtimes should: allocate fewer images than for
+ regular swapchains to reduce memory use.
****
A runtime may: implement any of these, but is not required to.
+A runtime must: return ename:XR_ERROR_FEATURE_UNSUPPORTED from
+flink:xrCreateSwapchain if an elink:XrSwapchainCreateFlags bit is requested
+but not implemented.
--
The number of images in each swapchain is implementation-defined.
@@ -6736,15 +7103,17 @@ flink:xrDestroySwapchain is called.
* [[VUID-xrDestroySwapchain-swapchain-parameter]] pname:swapchain must: be a valid slink:XrSwapchain handle
****
+.Thread Safety
+****
+* Access to pname:swapchain, and any child handles, must: be externally synchronized
+****
+
.Return Codes
****
<<fundamentals-successcodes,Success>>::
* ename:XR_SUCCESS
<<fundamentals-errorcodes,Failure>>::
-* ename:XR_ERROR_INSTANCE_LOST
-* ename:XR_ERROR_RUNTIME_FAILURE
* ename:XR_ERROR_HANDLE_INVALID
-* ename:XR_ERROR_VALIDATION_FAILURE
****
--
@@ -6791,6 +7160,9 @@ Fills an array of graphics API-specific `XrSwapchainImage` structures.
The resources must: be constant and valid for the lifetime of the
slink:XrSwapchain.
+Runtimes must: always return identical buffer contents from this enumeration
+for the lifetime of the swapchain.
+
Note: pname:images is a pointer to an array of structures of graphics
API-specific type, not an array of structure pointers.
@@ -6798,9 +7170,8 @@ API-specific type, not an array of structure pointers.
.Valid Usage (Implicit)
****
* [[VUID-xrEnumerateSwapchainImages-swapchain-parameter]] pname:swapchain must: be a valid slink:XrSwapchain handle
-* [[VUID-xrEnumerateSwapchainImages-imageCapacityInput-parameter]] If pname:imageCapacityInput is not `0`, pname:imageCapacityInput must: be a valid code:uint32_t value
-* [[VUID-xrEnumerateSwapchainImages-imageCountOutput-parameter]] If pname:imageCountOutput is not code:NULL, pname:imageCountOutput must: be a pointer to a code:uint32_t value
-* [[VUID-xrEnumerateSwapchainImages-images-parameter]] If pname:imageCapacityInput is not `0`, pname:images must: be a pointer to an array of pname:imageCapacityInput slink:XrSwapchainImageBaseHeader structures
+* [[VUID-xrEnumerateSwapchainImages-imageCountOutput-parameter]] pname:imageCountOutput must: be a pointer to a code:uint32_t value
+* [[VUID-xrEnumerateSwapchainImages-images-parameter]] If pname:imageCapacityInput is not `0`, pname:images must: be a pointer to an array of pname:imageCapacityInput slink:XrSwapchainImageBaseHeader-based structures. See also: slink:XrSwapchainImageD3D11KHR, slink:XrSwapchainImageD3D12KHR, slink:XrSwapchainImageVulkanKHR, slink:XrSwapchainImageOpenGLESKHR, slink:XrSwapchainImageOpenGLKHR
****
.Return Codes
@@ -6822,14 +7193,15 @@ API-specific type, not an array of structure pointers.
[open,refpage='XrSwapchainImageBaseHeader',desc='Image base header for a swapchain image',type='structs',xrefs='xrEnumerateSwapchainImages']
--
-The slink:XrSwapchainImageBaseHeader structure is defined as follows:
+The slink:XrSwapchainImageBaseHeader structure is defined as:
+
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[XrSwapchainImageBaseHeader,XrSwapchainImageBaseHeader]]
[source,c++]
----
typedef struct XrSwapchainImageBaseHeader {
- XrStructureType type;
- void* XR_MAY_ALIAS next;
+ XrStructureType type;
+ void* next;
} XrSwapchainImageBaseHeader;
----
@@ -6847,8 +7219,8 @@ structure.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
-* [[VUID-XrSwapchainImageBaseHeader-type-type]] pname:type must: be one of the following XrStructureType values: ename:XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR, ename:XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR, ename:XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR, ename:XR_TYPE_SWAPCHAIN_IMAGE_D3D10_KHR, ename:XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR, ename:XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR
-* [[VUID-XrSwapchainImageBaseHeader-next-next]] pname:next must: be code:NULL
+* [[VUID-XrSwapchainImageBaseHeader-type-type]] pname:type must: be one of the following XrStructureType values: ename:XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR, ename:XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR, ename:XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR, ename:XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR, ename:XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR
+* [[VUID-XrSwapchainImageBaseHeader-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
@@ -6880,7 +7252,8 @@ XrResult xrAcquireSwapchainImage(
.Parameter Descriptions
****
* pname:swapchain is the swapchain from which to acquire an image.
-* pname:acquireInfo is for extensibility purposes.
+* pname:acquireInfo exists for extensibility purposes, it is code:NULL or a
+ pointer to a valid slink:XrSwapchainImageAcquireInfo.
* pname:index is a pointer to the image index that was acquired.
****
@@ -6893,12 +7266,16 @@ If the pname:swapchain was created with the
ename:XR_SWAPCHAIN_CREATE_STATIC_IMAGE_BIT set in
slink:XrSwapchainCreateInfo::pname:createFlags, this function must: not have
been previously called for this swapchain.
+The runtime must: return ename:XR_ERROR_CALL_ORDER_INVALID if a
+pname:swapchain created with the ename:XR_SWAPCHAIN_CREATE_STATIC_IMAGE_BIT
+set in slink:XrSwapchainCreateInfo::pname:createFlags and this function has
+been successfully called previously for this swapchain.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
* [[VUID-xrAcquireSwapchainImage-swapchain-parameter]] pname:swapchain must: be a valid slink:XrSwapchain handle
-* [[VUID-xrAcquireSwapchainImage-acquireInfo-parameter]] pname:acquireInfo must: be a pointer to a valid slink:XrSwapchainImageAcquireInfo structure
+* [[VUID-xrAcquireSwapchainImage-acquireInfo-parameter]] If pname:acquireInfo is not code:NULL, pname:acquireInfo must: be a pointer to a valid slink:XrSwapchainImageAcquireInfo structure
* [[VUID-xrAcquireSwapchainImage-index-parameter]] pname:index must: be a pointer to a code:uint32_t value
****
@@ -6921,17 +7298,15 @@ been previously called for this swapchain.
[open,refpage='XrSwapchainImageAcquireInfo',desc='Describes a swapchain image acquisition',type='structs',xrefs='xrAcquireSwapchainImage']
--
-The slink:XrSwapchainImageAcquireInfo structure is available for
-extensibility purposes.
-It is defined as:
+The slink:XrSwapchainImageAcquireInfo structure is defined as:
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[XrSwapchainImageAcquireInfo,XrSwapchainImageAcquireInfo]]
[source,c++]
----
typedef struct XrSwapchainImageAcquireInfo {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
+ XrStructureType type;
+ const void* next;
} XrSwapchainImageAcquireInfo;
----
@@ -6941,11 +7316,16 @@ typedef struct XrSwapchainImageAcquireInfo {
* pname:next is code:NULL or a pointer to an extension-specific structure.
****
+Because this structure only exists to support extension-specific structures,
+flink:xrAcquireSwapchainImage will accept a code:NULL argument for
+pname:acquireInfo for applications that are not using any relevant
+extensions.
+
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
* [[VUID-XrSwapchainImageAcquireInfo-type-type]] pname:type must: be ename:XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO
-* [[VUID-XrSwapchainImageAcquireInfo-next-next]] pname:next must: be code:NULL
+* [[VUID-XrSwapchainImageAcquireInfo-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
@@ -6966,7 +7346,8 @@ XrResult xrWaitSwapchainImage(
.Parameter Descriptions
****
* pname:swapchain is the swapchain from which to wait for an image.
-* pname:waitInfo is a pointer to an slink:XrSwapchainImageWaitInfo struct.
+* pname:waitInfo is a pointer to an slink:XrSwapchainImageWaitInfo
+ structure.
****
Before an application can begin writing to a swapchain image, it must first
@@ -6981,7 +7362,7 @@ This function may block for longer than the timeout specified in
slink:XrSwapchainImageWaitInfo due to scheduling or contention.
If the timeout expires without the image becoming available for writing,
-ename:XR_TIMEOUT_EXPIRED is returned.
+ename:XR_TIMEOUT_EXPIRED must: be returned.
If flink:xrWaitSwapchainImage returns ename:XR_TIMEOUT_EXPIRED, the next
call to flink:xrWaitSwapchainImage will wait on the same image index again
until the function succeeds with ename:XR_SUCCESS.
@@ -7027,9 +7408,9 @@ It is defined as:
[source,c++]
----
typedef struct XrSwapchainImageWaitInfo {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- XrDuration timeout;
+ XrStructureType type;
+ const void* next;
+ XrDuration timeout;
} XrSwapchainImageWaitInfo;
----
@@ -7045,7 +7426,7 @@ typedef struct XrSwapchainImageWaitInfo {
.Valid Usage (Implicit)
****
* [[VUID-XrSwapchainImageWaitInfo-type-type]] pname:type must: be ename:XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO
-* [[VUID-XrSwapchainImageWaitInfo-next-next]] pname:next must: be code:NULL
+* [[VUID-XrSwapchainImageWaitInfo-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
@@ -7078,7 +7459,8 @@ XrResult xrReleaseSwapchainImage(
.Parameter Descriptions
****
* pname:swapchain is the slink:XrSwapchain from which to release an image.
-* pname:releaseInfo is for extensibility purposes.
+* pname:releaseInfo exists for extensibility purposes, it is code:NULL or a
+ pointer to a valid slink:XrSwapchainImageReleaseInfo.
****
If the pname:swapchain was created with the
@@ -7093,7 +7475,7 @@ been waited on by calling flink:xrWaitSwapchainImage.
.Valid Usage (Implicit)
****
* [[VUID-xrReleaseSwapchainImage-swapchain-parameter]] pname:swapchain must: be a valid slink:XrSwapchain handle
-* [[VUID-xrReleaseSwapchainImage-releaseInfo-parameter]] pname:releaseInfo must: be a pointer to a valid slink:XrSwapchainImageReleaseInfo structure
+* [[VUID-xrReleaseSwapchainImage-releaseInfo-parameter]] If pname:releaseInfo is not code:NULL, pname:releaseInfo must: be a pointer to a valid slink:XrSwapchainImageReleaseInfo structure
****
.Return Codes
@@ -7114,17 +7496,15 @@ been waited on by calling flink:xrWaitSwapchainImage.
[open,refpage='XrSwapchainImageReleaseInfo',desc='Describes a swapchain image release',type='structs',xrefs='xrReleaseSwapchainImage']
--
-The slink:XrSwapchainImageReleaseInfo structure is intended for
-extensibility purposes.
-It is defined as as:
+The slink:XrSwapchainImageReleaseInfo structure is defined as:
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[XrSwapchainImageReleaseInfo,XrSwapchainImageReleaseInfo]]
[source,c++]
----
typedef struct XrSwapchainImageReleaseInfo {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
+ XrStructureType type;
+ const void* next;
} XrSwapchainImageReleaseInfo;
----
@@ -7134,11 +7514,16 @@ typedef struct XrSwapchainImageReleaseInfo {
* pname:next is code:NULL or a pointer to an extension-specific structure.
****
+Because this structure only exists to support extension-specific structures,
+flink:xrReleaseSwapchainImage will accept a code:NULL argument for
+pname:releaseInfo for applications that are not using any relevant
+extensions.
+
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
* [[VUID-XrSwapchainImageReleaseInfo-type-type]] pname:type must: be ename:XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO
-* [[VUID-XrSwapchainImageReleaseInfo-next-next]] pname:next must: be code:NULL
+* [[VUID-XrSwapchainImageReleaseInfo-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
@@ -7148,8 +7533,8 @@ typedef struct XrSwapchainImageReleaseInfo {
=== View and Projection State
An application uses flink:xrLocateViews to retrieve the viewer pose and
-projection parameters needed to render each composition view returned by
-flink:xrEnumerateViewConfigurationViews.
+projection parameters needed to render each view for use in a composition
+projection layer.
[open,refpage='xrLocateViews',desc='Gets view and projection info',type='protos',xrefs='XrView XrViewState XrViewLocateInfo']
--
@@ -7175,9 +7560,9 @@ XrResult xrLocateViews(
structure.
* pname:viewState is the output structure with the viewer state information.
* pname:viewCapacityInput is an input parameter which specifies the capacity
-of the pname:views array.
-The required capacity is no more than
-slink:XrSystemGraphicsProperties::maxViewCount
+ of the pname:views array.
+ The required capacity must: be same as defined by the corresponding
+ elink:XrViewConfigurationType.
* pname:viewCountOutput is an output parameter which identifies the valid
count of pname:views.
* pname:views is an array of slink:XrView.
@@ -7185,10 +7570,9 @@ slink:XrSystemGraphicsProperties::maxViewCount
detailed description of retrieving the required pname:views size.
****
-The function flink:xrLocateViews returns the view and projection info for a
+The flink:xrLocateViews function returns the view and projection info for a
particular display time.
-This time is typically the slink:XrFrameState::pname:predictedDisplayTime
-for a given frame.
+This time is typically the target display time for a given frame.
Repeatedly calling flink:xrLocateViews with the same time may: not
necessarily return the same result.
Instead the prediction gets increasingly accurate as the function is called
@@ -7197,11 +7581,10 @@ This allows an application to get the predicted views as late as possible in
its pipeline to get the least amount of latency and prediction error.
flink:xrLocateViews returns an array of slink:XrView elements, one for each
-view of the running session's active view configuration, along with an
-slink:XrViewState containing additional state data shared across all views
-for the primary viewer.
+view of the specified view configuration type, along with an
+slink:XrViewState containing additional state data shared across all views.
The eye each view corresponds to is statically defined in
-<<primary_view_configurations, elink:XrViewConfigurationType>> in case the
+<<view_configuration_type, elink:XrViewConfigurationType>> in case the
application wants to apply eye-specific rendering traits.
The slink:XrViewState and slink:XrView member data may change on subsequent
calls to flink:xrLocateViews, and so applications must: not assume it to be
@@ -7213,8 +7596,7 @@ constant.
* [[VUID-xrLocateViews-session-parameter]] pname:session must: be a valid slink:XrSession handle
* [[VUID-xrLocateViews-viewLocateInfo-parameter]] pname:viewLocateInfo must: be a pointer to a valid slink:XrViewLocateInfo structure
* [[VUID-xrLocateViews-viewState-parameter]] pname:viewState must: be a pointer to an slink:XrViewState structure
-* [[VUID-xrLocateViews-viewCapacityInput-parameter]] If pname:viewCapacityInput is not `0`, pname:viewCapacityInput must: be a valid code:uint32_t value
-* [[VUID-xrLocateViews-viewCountOutput-parameter]] If pname:viewCountOutput is not code:NULL, pname:viewCountOutput must: be a pointer to a code:uint32_t value
+* [[VUID-xrLocateViews-viewCountOutput-parameter]] pname:viewCountOutput must: be a pointer to a code:uint32_t value
* [[VUID-xrLocateViews-views-parameter]] If pname:viewCapacityInput is not `0`, pname:views must: be a pointer to an array of pname:viewCapacityInput slink:XrView structures
****
@@ -7230,6 +7612,8 @@ constant.
* ename:XR_ERROR_HANDLE_INVALID
* ename:XR_ERROR_SIZE_INSUFFICIENT
* ename:XR_ERROR_VALIDATION_FAILURE
+* ename:XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED
+* ename:XR_ERROR_TIME_INVALID
****
--
@@ -7243,15 +7627,17 @@ The slink:XrViewLocateInfo structure is defined as:
[source,c++]
----
typedef struct XrViewLocateInfo {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- XrTime displayTime;
- XrSpace space;
+ XrStructureType type;
+ const void* next;
+ XrViewConfigurationType viewConfigurationType;
+ XrTime displayTime;
+ XrSpace space;
} XrViewLocateInfo;
----
.Member Descriptions
****
+* pname:viewConfigurationType is elink:XrViewConfigurationType to query for.
* pname:displayTime is the time for which the view poses are predicted.
* pname:space is the slink:XrSpace in which the pname:pose in each
slink:XrView is expressed.
@@ -7260,16 +7646,17 @@ typedef struct XrViewLocateInfo {
The slink:XrViewLocateInfo structure contains the display time and space
used to locate the view slink:XrView structures.
-.Valid Usage
-****
-* pname:displayTime should: be a valid time in the future.
-****
+The runtime must: return error
+ename:XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED if the given
+pname:viewConfigurationType is not one of the supported type reported by
+flink:xrEnumerateViewConfigurations.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
* [[VUID-XrViewLocateInfo-type-type]] pname:type must: be ename:XR_TYPE_VIEW_LOCATE_INFO
-* [[VUID-XrViewLocateInfo-next-next]] pname:next must: be code:NULL
+* [[VUID-XrViewLocateInfo-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrViewLocateInfo-viewConfigurationType-parameter]] pname:viewConfigurationType must: be a valid elink:XrViewConfigurationType value
* [[VUID-XrViewLocateInfo-space-parameter]] pname:space must: be a valid slink:XrSpace handle
****
@@ -7284,10 +7671,10 @@ The slink:XrView structure is defined as:
[source,c++]
----
typedef struct XrView {
- XrStructureType type;
- void* XR_MAY_ALIAS next;
- XrPosef pose;
- XrFovf fov;
+ XrStructureType type;
+ void* next;
+ XrPosef pose;
+ XrFovf fov;
} XrView;
----
@@ -7301,13 +7688,13 @@ typedef struct XrView {
****
The slink:XrView structure contains view pose and projection state necessary
-to render a single view in the view configuration.
+to render a single projection view in the view configuration.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
* [[VUID-XrView-type-type]] pname:type must: be ename:XR_TYPE_VIEW
-* [[VUID-XrView-next-next]] pname:next must: be code:NULL
+* [[VUID-XrView-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
@@ -7321,9 +7708,9 @@ The slink:XrViewState structure is defined as:
[source,c++]
----
typedef struct XrViewState {
- XrStructureType type;
- void* XR_MAY_ALIAS next;
- XrViewStateFlags viewStateFlags;
+ XrStructureType type;
+ void* next;
+ XrViewStateFlags viewStateFlags;
} XrViewState;
----
@@ -7332,7 +7719,7 @@ typedef struct XrViewState {
* pname:type is the elink:XrStructureType of this structure.
* pname:next is code:NULL or a pointer to an extension-specific structure.
* pname:viewStateFlags is a bitmask of elink:XrViewStateFlagBits indicating
- state that spans all views.
+ state for all views.
****
The slink:XrViewState contains additional view state from
@@ -7342,8 +7729,8 @@ flink:xrLocateViews common to all views of the active view configuration.
.Valid Usage (Implicit)
****
* [[VUID-XrViewState-type-type]] pname:type must: be ename:XR_TYPE_VIEW_STATE
-* [[VUID-XrViewState-next-next]] pname:next must: be code:NULL
-* [[VUID-XrViewState-viewStateFlags-parameter]] pname:viewStateFlags must: be 0 or a valid combination of elink:XrViewStateFlagBits values
+* [[VUID-XrViewState-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrViewState-viewStateFlags-parameter]] pname:viewStateFlags must: be `0` or a valid combination of elink:XrViewStateFlagBits values
****
--
@@ -7395,82 +7782,10 @@ static const XrViewStateFlags XR_VIEW_STATE_POSITION_TRACKED_BIT = 0x00000008;
****
--
-[[ipd-iad-er]]
-==== IPD / IAD / ER
+[[frame-synchronization]]
+=== Frame Synchronization
-The Inter Pupillary Distance (IPD), the distance between the user's eyes,
-the Inter Axial Distance (IAD), the distance between the lenses, and the Eye
-Relief (ER), the distance from the pupil of the eye to the nearest surface
-of the lens, are all properties of the user and/or a typical VR headset.
-
-image::images/ipd.svg[align="center", title="Inter Pupillary Distance"]
-
-On some headsets the IAD and/or the ER can be dynamically adjusted at
-run-time.
-The application, however, is not explicitly exposed to these values.
-CAVE-like VR systems do not use lenses and are not concerned with the IAD
-and ER, in which case exposing these values to the application makes no
-sense.
-
-Instead, with a predicted head pose, the application gets a view pose for
-each eye, the direction in which each eye is looking, and the suggested FOV
-for each eye from which the application can trivially derive a projection
-matrix.
-It is important to get all this data as an atomic package with the same
-prediction for the same time, in particular when using a VR headset that
-allows the IAD and/or ER to be adjusted at run-time.
-
-[[display-timing]]
-=== Display Timing
-
-Instead of just using the latest tracking data, an application uses
-predicted tracking data for the middle of the time period during which the
-new swapchains will be displayed.
-The function flink:xrWaitFrame returns a predicted display time for the time
-that the runtime predicts the swapchain images will be displayed.
-The application should: use the predicted display time when requesting space
-relationships and view poses for rendering.
-
-flink:xrEndFrame may return immediately to the application, but
-flink:xrWaitFrame will block for an amount of time that depends on
-throttling of the application by the runtime.
-There is no strong coupling between a specific call to flink:xrWaitFrame,
-and a specific frame description in flink:xrEndFrame.
-However, slink:XrFrameEndInfo does include a display time, which should: be
-computed using values returned by flink:xrWaitFrame.
-The runtime may: affect this computation by changing the return values of
-flink:xrWaitFrame in response to feedback from frame submission and
-completion times in flink:xrEndFrame.
-This results in a consistent predicted display time at every stage in the
-engine pipeline without being affected by oscillation in a deep threaded
-pipeline.
-Note that, if the application has multiple pipeline stages, the application
-must: pass the predicted display time through its pipeline, as
-flink:xrWaitFrame should: not be called more than once per frame.
-However, the runtime should: be robust against variations in the timing of
-calls to flink:xrWaitFrame, since a pipelined system may: call
-flink:xrWaitFrame on a separate thread from flink:xrBeginFrame and
-flink:xrEndFrame without any synchronization guarantees.
-
-An accurate predicted display time is very important to avoid black pull-in
-by reprojection and to reduce motion judder in case the runtime does not
-implement a translational reprojection.
-Reprojection should: never display images before the display refresh period
-they were predicted for, even if they are completed early, because this will
-cause motion judder just the same.
-In other words, the better the predicted display time, the less latency
-experienced by the user.
-The engine simulation also needs to advance based on the time it will be
-displayed.
-Every stage in the engine pipeline should: use the exact same predicted
-display time for one particular frame.
-An accurate and consistent predicted display time across all stages and
-threads in the engine pipeline is important to avoid object motion judder.
-
-[[frame-waiting]]
-=== Frame Waiting
-
-An application synchronizes its rendering loop to the compositor by calling
+An application synchronizes its rendering loop to the runtime by calling
flink:xrWaitFrame.
[open,refpage='xrWaitFrame',desc='Frame timing function',type='protos',xrefs='xrBeginFrame xrEndFrame XrFrameWaitInfo XrFrameState']
@@ -7490,26 +7805,36 @@ XrResult xrWaitFrame(
.Parameter Descriptions
****
* pname:session is a valid slink:XrSession handle.
-* pname:frameWaitInfo is a pointer to a valid slink:XrFrameWaitInfo.
+* pname:frameWaitInfo exists for extensibility purposes, it is code:NULL or
+ a pointer to a valid slink:XrFrameWaitInfo.
* pname:frameState is a pointer to a valid slink:XrFrameState, an output
parameter.
****
-If a frame submitted to flink:xrEndFrame is consumed by the compositor
-before its target display time, a subsequent call to flink:xrWaitFrame must:
-block the caller until the start of the next rendering interval after the
-frame's target display time as determined by the runtime.
+flink:xrWaitFrame throttles the application frame loop in order to
+synchronize application frame submissions with the display.
+flink:xrWaitFrame returns a predicted display time for the next time that
+the runtime predicts a composited frame will be displayed.
+The runtime may: affect this computation by changing the return values and
+throttling of flink:xrWaitFrame in response to feedback from frame
+submission and completion times in flink:xrEndFrame.
+When less than one frame interval has passed since the previous return from
+flink:xrWaitFrame, the runtime should: block until the beginning of the next
+frame interval.
+If more than one frame interval has passed since the last return from
+flink:xrWaitFrame, the runtime may: return immediately or block until the
+beginning of the next frame interval.
-If a frame submitted to flink:xrEndFrame misses its target display time, a
-subsequent call to flink:xrWaitFrame must: block the caller until that frame
-is consumed by the compositor, at which point it must: return immediately.
+In the case that an application has pipelined frame submissions, the
+application should: compute the appropriate target display time using both
+the predicted display time and predicted display interval.
+The application should: use the computed target display time when requesting
+space and view locations for rendering.
-If no frame has been submitted to flink:xrEndFrame since any prior call to
-flink:xrWaitFrame, a subsequent call to flink:xrWaitFrame must: block the
-caller until the start of the next rendering interval time as determined by
-the runtime.
+The slink:XrFrameState::pname:predictedDisplayTime returned by
+flink:xrWaitFrame must: be monotonically increasing.
-The runtime may: dynamically adjust the start time of the rendering interval
+The runtime may: dynamically adjust the start time of the frame interval
relative to the display hardware's refresh cycle to minimize graphics
processor contention between the application and the compositor.
@@ -7519,9 +7844,21 @@ thread than flink:xrBeginFrame/flink:xrEndFrame are being called from.
Calling flink:xrWaitFrame must: be externally synchronized by the
application, concurrent calls may: result in undefined behavior.
-The runtime must: return ename:XR_ERROR_SESSION_NOT_RUNNING if pname:session
-is not in the ename:XR_SESSION_STATE_RUNNING, ename:XR_SESSION_STATE_VISIBLE
-or ename:XR_SESSION_STATE_FOCUSED elink:XrSessionState.
+The runtime must: return ename:XR_ERROR_SESSION_NOT_RUNNING if the
+pname:session <<session_not_running, is not running>>.
+
+[NOTE]
+.Note
+====
+The engine simulation should: advance based on the display time.
+Every stage in the engine pipeline should use the exact same display time
+for one particular application-generated frame.
+An accurate and consistent display time across all stages and threads in the
+engine pipeline is important to avoid object motion judder.
+If the application has multiple pipeline stages, the application should pass
+its computed display time through its pipeline, as xrWaitFrame must be
+called only once per frame.
+====
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
@@ -7531,6 +7868,11 @@ or ename:XR_SESSION_STATE_FOCUSED elink:XrSessionState.
* [[VUID-xrWaitFrame-frameState-parameter]] pname:frameState must: be a pointer to an slink:XrFrameState structure
****
+.Thread Safety
+****
+* Access to the pname:session parameter by any other flink:xrWaitFrame call must: be externally synchronized
+****
+
.Return Codes
****
<<fundamentals-successcodes,Success>>::
@@ -7556,8 +7898,8 @@ The slink:XrFrameWaitInfo structure is defined as:
[source,c++]
----
typedef struct XrFrameWaitInfo {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
+ XrStructureType type;
+ const void* next;
} XrFrameWaitInfo;
----
@@ -7568,14 +7910,14 @@ typedef struct XrFrameWaitInfo {
****
Because this structure only exists to support extension-specific structures,
-flink:xrWaitFrame will accept a code:NULL argument for pname:frameWaitInfo
+flink:xrWaitFrame must: accept a code:NULL argument for pname:frameWaitInfo
for applications that are not using any relevant extensions.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
* [[VUID-XrFrameWaitInfo-type-type]] pname:type must: be ename:XR_TYPE_FRAME_WAIT_INFO
-* [[VUID-XrFrameWaitInfo-next-next]] pname:next must: be code:NULL
+* [[VUID-XrFrameWaitInfo-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
@@ -7589,10 +7931,11 @@ The slink:XrFrameState structure is defined as:
[source,c++]
----
typedef struct XrFrameState {
- XrStructureType type;
- void* XR_MAY_ALIAS next;
- XrTime predictedDisplayTime;
- XrDuration predictedDisplayPeriod;
+ XrStructureType type;
+ void* next;
+ XrTime predictedDisplayTime;
+ XrDuration predictedDisplayPeriod;
+ XrBool32 shouldRender;
} XrFrameState;
----
@@ -7605,20 +7948,36 @@ typedef struct XrFrameState {
* pname:predictedDisplayPeriod is the basetype:XrDuration of the display
period for the next application-generated frame, for use in predicting
display times beyond the next one.
+* pname:shouldRender is ename:XR_TRUE if the application should: render its
+layers as normal and submit them to flink:xrEndFrame.
+When this value is ename:XR_FALSE, the application should: avoid heavy GPU
+work where possible, for example by skipping layer rendering and then
+omitting those layers when calling flink:xrEndFrame.
****
-slink:XrFrameState describes the time at which the next frame submitted to
-flink:xrEndFrame will be displayed to the user.
+slink:XrFrameState describes the time at which the next frame will be
+displayed to the user.
pname:predictedDisplayTime must: refer to the midpoint of the interval
during which the frame is displayed.
The runtime may: report a different pname:predictedDisplayPeriod from the
-hardware's refresh cycle when interpolating submitted frames.
+hardware's refresh cycle.
+
+For any frame where pname:shouldRender is ename:XR_FALSE, the application
+should: avoid heavy GPU work for that frame, for example by not rendering
+its layers.
+This typically happens when the application is transitioning into or out of
+a running session, or when some system UI is fully covering the application
+at the moment.
+As long as the session <<session_running, is running>>, the application
+should: keep running the frame loop to maintain the frame synchronization to
+the runtime, even if this requires calling flink:xrEndFrame with all layers
+omitted.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
* [[VUID-XrFrameState-type-type]] pname:type must: be ename:XR_TYPE_FRAME_STATE
-* [[VUID-XrFrameState-next-next]] pname:next must: be code:NULL
+* [[VUID-XrFrameState-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
@@ -7629,17 +7988,20 @@ hardware's refresh cycle when interpolating submitted frames.
Every application must: call flink:xrBeginFrame before calling
flink:xrEndFrame, and should: call flink:xrEndFrame before calling
flink:xrBeginFrame again.
-Calling flink:xrEndFrame again without a prior call toflink:xrBeginFrame
-will result in ename:XR_ERROR_CALL_ORDER_INVALID being returned by
+Calling flink:xrEndFrame again without a prior call to flink:xrBeginFrame
+must: result in ename:XR_ERROR_CALL_ORDER_INVALID being returned by
flink:xrEndFrame.
An application may: call flink:xrBeginFrame again if the prior
flink:xrEndFrame fails or if the application wishes to discard an
in-progress frame.
-Calling flink:xrBeginFrame again with no intervening flink:xrEndFrame call
-will result in the success code ename:XR_FRAME_DISCARDED being returned from
-flink:xrBeginFrame.
+A successful call to flink:xrBeginFrame again with no intervening
+flink:xrEndFrame call must: result in the success code
+ename:XR_FRAME_DISCARDED being returned from flink:xrBeginFrame.
In this case it is assumed that the flink:xrBeginFrame refers to the next
frame and the previously begun frame is forfeited by the application.
+An application may: call flink:xrEndFrame without having called
+flink:xrReleaseSwapchainImage since the previous call to flink:xrEndFrame
+for any swapchain passed to flink:xrEndFrame.
Applications should: call flink:xrBeginFrame right before executing any
graphics device work for a given frame, as opposed to calling it afterwards.
The runtime must: only compose frames whose flink:xrBeginFrame and
@@ -7664,28 +8026,24 @@ XrResult xrBeginFrame(
.Parameter Descriptions
****
* pname:session is a valid slink:XrSession handle.
-* pname:frameBeginInfo is code:NULL or a pointer to a valid
- slink:XrFrameBeginInfo.
+* pname:frameBeginInfo exists for extensibility purposes, it is code:NULL or
+ a pointer to a valid slink:XrFrameBeginInfo.
****
-flink:xrBeginFrame is called prior to the the start of frame rendering.
+flink:xrBeginFrame is called prior to the start of frame rendering.
+The application should: still call flink:xrBeginFrame but omit rendering
+work for the frame if slink:XrFrameState::pname:shouldRender is
+ename:XR_FALSE.
The runtime must: return the success code ename:XR_FRAME_DISCARDED if a
prior flink:xrBeginFrame has been called without an intervening call to
flink:xrEndFrame.
-The runtime may: return the success code
-ename:XR_SESSION_VISIBILITY_UNAVAILABLE if it determines that the current
-frame will not be visible.
-In this case the application may: elect to omit rendering work for the
-frame, but should: still call flink:xrEndFrame.
-
The runtime must: consider the frame in-progress and ready for an
flink:xrEndFrame call if a success code is returned.
-The runtime must: return ename:XR_ERROR_SESSION_NOT_RUNNING if pname:session
-is not in the ename:XR_SESSION_STATE_RUNNING, ename:XR_SESSION_STATE_VISIBLE
-or ename:XR_SESSION_STATE_FOCUSED elink:XrSessionState.
+The runtime must: return ename:XR_ERROR_SESSION_NOT_RUNNING if the
+pname:session <<session_not_running, is not running>>.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
@@ -7700,7 +8058,6 @@ or ename:XR_SESSION_STATE_FOCUSED elink:XrSessionState.
* ename:XR_SUCCESS
* ename:XR_SESSION_LOSS_PENDING
* ename:XR_FRAME_DISCARDED
-* ename:XR_SESSION_VISIBILITY_UNAVAILABLE
<<fundamentals-errorcodes,Failure>>::
* ename:XR_ERROR_INSTANCE_LOST
* ename:XR_ERROR_SESSION_LOST
@@ -7721,8 +8078,8 @@ The slink:XrFrameBeginInfo structure is defined as:
[source,c++]
----
typedef struct XrFrameBeginInfo {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
+ XrStructureType type;
+ const void* next;
} XrFrameBeginInfo;
----
@@ -7740,7 +8097,7 @@ for applications that are not using any relevant extensions.
.Valid Usage (Implicit)
****
* [[VUID-XrFrameBeginInfo-type-type]] pname:type must: be ename:XR_TYPE_FRAME_BEGIN_INFO
-* [[VUID-XrFrameBeginInfo-next-next]] pname:next must: be code:NULL
+* [[VUID-XrFrameBeginInfo-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
@@ -7764,9 +8121,32 @@ XrResult xrEndFrame(
* pname:frameEndInfo is a pointer to a valid slink:XrFrameEndInfo.
****
+flink:xrEndFrame may: return immediately to the application.
+There is no strong coupling between a specific call to flink:xrWaitFrame,
+and a specific frame description in flink:xrEndFrame.
+However, slink:XrFrameEndInfo does include a display time, which should: be
+computed using values returned by flink:xrWaitFrame.
+The runtime should: be robust against variations in the timing of calls to
+flink:xrWaitFrame, since a pipelined system may call flink:xrWaitFrame on a
+separate thread from flink:xrBeginFrame and flink:xrEndFrame without any
+synchronization guarantees.
+
+[NOTE]
+.Note
+====
+An accurate predicted display time is very important to avoid black pull-in
+by reprojection and to reduce motion judder in case the runtime does not
+implement a translational reprojection.
+Reprojection should never display images before the display refresh period
+they were predicted for, even if they are completed early, because this will
+cause motion judder just the same.
+In other words, the better the predicted display time, the less latency
+experienced by the user.
+====
+
Every call to flink:xrEndFrame must: be preceded by a successful call to
flink:xrBeginFrame.
-Failure to do so will result in ename:XR_ERROR_CALL_ORDER_INVALID being
+Failure to do so must: result in ename:XR_ERROR_CALL_ORDER_INVALID being
returned by flink:xrEndFrame.
slink:XrFrameEndInfo may: reference swapchains into which the application
has rendered for this frame.
@@ -7779,27 +8159,26 @@ This can be used for example to render a side by side image into a single
swapchain image and referencing it twice with differing image rectangles in
different layers.
-ename:XR_ERROR_LAYER_INVALID will be returned if an unknown or unsupported
-layer type is passed as one of the slink:XrFrameEndInfo::layers.
+If no layers are provided then the display must: be cleared.
-ename:XR_ERROR_LAYER_LIMIT_EXCEEDED will be returned if
+ename:XR_ERROR_LAYER_INVALID must: be returned if an unknown, unsupported
+layer type, or code:NULL pointer is passed as one of the
+slink:XrFrameEndInfo::layers.
+
+ename:XR_ERROR_LAYER_LIMIT_EXCEEDED must: be returned if
slink:XrFrameEndInfo::layerCount exceeds
slink:XrSystemGraphicsProperties::maxLayerCount or if the runtime is unable
to composite the specified layers due to resource constraints.
-ename:XR_ERROR_SWAPCHAIN_RECT_INVALID will be returned if
+ename:XR_ERROR_SWAPCHAIN_RECT_INVALID must: be returned if
slink:XrFrameEndInfo::layers contains a composition layer which references
-pixels outside of the associated swapchain image.
+pixels outside of the associated swapchain image or if negatively sized.
-ename:XR_ERROR_ENVIRONMENT_BLEND_MODE_UNSUPPORTED will be returned if
+ename:XR_ERROR_ENVIRONMENT_BLEND_MODE_UNSUPPORTED must: be returned if
slink:XrFrameEndInfo::environmentBlendMode is not supported.
-The runtime must: return ename:XR_ERROR_SESSION_NOT_RUNNING if pname:session
-is not in the ename:XR_SESSION_STATE_RUNNING, ename:XR_SESSION_STATE_VISIBLE
-or ename:XR_SESSION_STATE_FOCUSED elink:XrSessionState.
-
-The runtime must: return ename:XR_ERROR_POSE_INVALID if any pose passed in
-slink:XrFrameEndInfo contains non-unit quaternions.
+ename:XR_ERROR_SESSION_NOT_RUNNING must: be returned if the pname:session
+<<session_not_running, is not running>>.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
@@ -7825,6 +8204,7 @@ slink:XrFrameEndInfo contains non-unit quaternions.
* ename:XR_ERROR_SESSION_NOT_RUNNING
* ename:XR_ERROR_LAYER_LIMIT_EXCEEDED
* ename:XR_ERROR_VALIDATION_FAILURE
+* ename:XR_ERROR_TIME_INVALID
****
--
@@ -7839,7 +8219,7 @@ The slink:XrFrameEndInfo structure is defined as:
----
typedef struct XrFrameEndInfo {
XrStructureType type;
- const void* XR_MAY_ALIAS next;
+ const void* next;
XrTime displayTime;
XrEnvironmentBlendMode environmentBlendMode;
uint32_t layerCount;
@@ -7860,9 +8240,7 @@ typedef struct XrFrameEndInfo {
The maximum supported layer count is identified by
slink:XrSystemGraphicsProperties::maxLayerCount.
If layerCount is greater than the maximum supported layer count then
- ename:XR_ERROR_LAYER_LIMIT_EXCEEDED is returned.
- The runtime must: support at least
- ename:XR_MIN_COMPOSITION_LAYERS_SUPPORTED layers.
+ ename:XR_ERROR_LAYER_LIMIT_EXCEEDED must: be returned.
* pname:layers is a pointer to an array of
slink:XrCompositionLayerBaseHeader pointers.
****
@@ -7871,18 +8249,16 @@ slink:XrCompositionLayerBaseHeader pointers.
.Valid Usage (Implicit)
****
* [[VUID-XrFrameEndInfo-type-type]] pname:type must: be ename:XR_TYPE_FRAME_END_INFO
-* [[VUID-XrFrameEndInfo-next-next]] pname:next must: be code:NULL
-* [[VUID-XrFrameEndInfo-environmentBlendMode-parameter]] pname:environmentBlendMode must: be a valid slink:XrEnvironmentBlendMode value
-* [[VUID-XrFrameEndInfo-layerCount-parameter]] If pname:layerCount is not `0`, pname:layerCount must: be a valid code:uint32_t value
-* [[VUID-XrFrameEndInfo-layers-parameter]] If pname:layerCount is not `0`, pname:layers must: be a pointer to an array of pname:layerCount valid slink:XrCompositionLayerBaseHeader structures
+* [[VUID-XrFrameEndInfo-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrFrameEndInfo-environmentBlendMode-parameter]] pname:environmentBlendMode must: be a valid elink:XrEnvironmentBlendMode value
+* [[VUID-XrFrameEndInfo-layers-parameter]] If pname:layerCount is not `0`, pname:layers must: be a pointer to an array of pname:layerCount valid slink:XrCompositionLayerBaseHeader-based structures. See also: slink:XrCompositionLayerEquirectKHR, slink:XrCompositionLayerCylinderKHR, slink:XrCompositionLayerCubeKHR, slink:XrCompositionLayerQuad, slink:XrCompositionLayerProjection
****
--
All layers submitted to flink:xrEndFrame will be presented to the primary
-view configuration of the running session unless otherwise specified by
-extension functionality.
+view configuration of the running session.
[[frame-rate]]
==== Frame Rate
@@ -7891,8 +8267,8 @@ For every application-generated frame, the application may: call
flink:xrEndFrame to submit the application-generated composition layers.
In addition, the application must: call flink:xrWaitFrame when the
application is ready to begin preparing the next set of frame layers.
-flink:xrEndFrame may return immediately to the application, but
-flink:xrWaitFrame will block for an amount of time that depends on
+flink:xrEndFrame may: return immediately to the application, but
+flink:xrWaitFrame must: block for an amount of time that depends on
throttling of the application by the runtime.
The earliest the runtime will return from flink:xrWaitFrame is when it
determines that the application should: start drawing the next frame.
@@ -7906,14 +8282,14 @@ All composition layers to be drawn must: be submitted with every
flink:xrEndFrame call.
A layer that is omitted in this call will not be drawn by the runtime layer
compositor.
-All views associated with projection layers must: be supplied or
-ename:XR_ERROR_VALIDATION_FAILURE will be returned by flink:xrEndFrame.
+All views associated with projection layers must: be supplied, or
+ename:XR_ERROR_VALIDATION_FAILURE must: be returned by flink:xrEndFrame.
-Composition layers are drawn in the same order as they are specified in via
-slink:XrFrameEndInfo, with the 0th layer drawn first.
-Layers are drawn with a "painter's algorithm," with each successive layer
-potentially overwriting the destination layers whether or not the new layers
-are virtually closer to the viewer.
+Composition layers must: be drawn in the same order as they are specified in
+via slink:XrFrameEndInfo, with the 0th layer drawn first.
+Layers must: be drawn with a "painter's algorithm," with each successive
+layer potentially overwriting the destination layers whether or not the new
+layers are virtually closer to the viewer.
[[composition-layer-flags]]
==== Composition Layer Flags
@@ -7929,6 +8305,7 @@ The elink:XrCompositionLayerFlagBits bitfield is specified as:
// Flag bits for XrCompositionLayerFlags
static const XrCompositionLayerFlags XR_COMPOSITION_LAYER_CORRECT_CHROMATIC_ABERRATION_BIT = 0x00000001;
static const XrCompositionLayerFlags XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT = 0x00000002;
+static const XrCompositionLayerFlags XR_COMPOSITION_LAYER_UNPREMULTIPLIED_ALPHA_BIT = 0x00000004;
----
@@ -7942,6 +8319,9 @@ layers.
default.
* ename:XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT enables the
layer's texture alpha channel.
+* ename:XR_COMPOSITION_LAYER_UNPREMULTIPLIED_ALPHA_BIT indicates that the
+ layer's color components have not been premultiplied with the layer's
+ alpha component.
****
--
@@ -7950,61 +8330,33 @@ layers.
All types of composition layers are subject to blending with other layers.
Blending of layers can be controlled by layer per-texel source alpha.
-Destination alpha is not supported.
Layer swapchain textures may contain an alpha channel, depending on the
image format.
-If a submitted swapchain's texture format includes an alpha channel, and if
-the ename:XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT is enabled,
-then the layer composition uses the alpha channel to modulate the blending
-of the swapchain texture against the destination.
-Swapchain texture color channels must be encoded with premultiplied alpha.
-If the ename:XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT is enabled
-and the swapchain texture has no alpha channel then the bit is effectively
-ignored and the texture is treated as if it is opaque (has alpha channel
-values of one).
-If the ename:XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT is not
-enabled, then the swapchain texture is treated as if each texel has an alpha
-value of 1, regardless of the presence of a texture swapchain alpha.
-Texture color and alpha channels are clamped to a range of [eq]#[0.0, 1.0]#
-as input to the blending operation.
+If a submitted swapchain's texture format does not include an alpha channel
+or if the ename:XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT is
+unset, then the layer alpha is initialized to one.
-The blending operation between the source and destination is an addition.
-The blending factor for the source texture color and alpha channels is one
-[eq]#(1, 1, 1, 1)#.
-The blending factor for the destination texture color and alpha channels is
-one minus source alpha (1-SRC_ALPHA).
-The result is:
+If the swapchain texture format color encoding is other than RGBA, it is
+converted to RGBA.
+
+If the texture color channels are encoded without premultiplying by alpha,
+the ename:XR_COMPOSITION_LAYER_UNPREMULTIPLIED_ALPHA_BIT should: be set.
+The effect of this bit alters the layer color as follows:
```
-Destination red = (source red + (destination red * (1 - source alpha))
-Destination green = (source green + (destination green * (1 - source alpha))
-Destination blue = (source blue + (destination blue * (1 - source alpha))
+LayerColor.RGB *= LayerColor.A
```
-Textures that use color encoding other than RGB (e.g. YUV) are blended in a
-way equivalent to if the encoding was converted to RGB.
-
-[[composition-layer-behavior]]
-==== Composition Layer Behavior
+LayerColor is then clamped to a range of [eq]#[0.0, 1.0]#.
-The behavior of flink:xrEndFrame with respect to layers includes the
-following behavior, evaluated in the order given:
+The layer blending operation is defined as:
-* flink:xrEndFrame with a layer count of 0 results in a return of
- ename:XR_SUCCESS and the VR display cleared.
-* flink:xrEndFrame with a layer count greater than
- slink:XrSystemGraphicsProperties::maxLayerCount results in a return of
- ename:XR_ERROR_LAYER_LIMIT_EXCEEDED.
-* flink:xrEndFrame with any code:NULL pointer to
- slink:XrCompositionLayerBaseHeader layer entries is invalid and results in
- a return of ename:XR_ERROR_LAYER_INVALID.
-* flink:xrEndFrame with any code:NULL image is invalid and results in a
- return of ename:XR_ERROR_HANDLE_INVALID.
-* flink:xrEndFrame with an empty layer pname:imageRect results in
- ename:XR_SUCCESS but nothing drawn.
-* flink:xrEndFrame with a negatively sized pname:imageRect results in
- ename:XR_ERROR_SWAPCHAIN_RECT_INVALID.
+```
+CompositeColor = LayerColor + CompositeColor * (1 - LayerColor.A)
+```
+Before the first layer is composited, all components of CompositeColor are
+initialized to zero.
[[composition-layer-types]]
==== Composition Layer Types
@@ -8042,10 +8394,10 @@ The slink:XrCompositionLayerBaseHeader structure is defined as:
[source,c++]
----
typedef struct XrCompositionLayerBaseHeader {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- XrCompositionLayerFlags layerFlags;
- XrSpace space;
+ XrStructureType type;
+ const void* next;
+ XrCompositionLayerFlags layerFlags;
+ XrSpace space;
} XrCompositionLayerBaseHeader;
----
@@ -8062,8 +8414,8 @@ typedef struct XrCompositionLayerBaseHeader {
All composition layer structures begin with the elements described in the
slink:XrCompositionLayerBaseHeader.
-The slink:XrCompositionLayerBaseHeader struct is not intended to be directly
-used, but forms a basis for defining current and future structures
+The slink:XrCompositionLayerBaseHeader structure is not intended to be
+directly used, but forms a basis for defining current and future structures
containing composition layer information.
The slink:XrFrameEndInfo structure contains an array of pointers to these
polymorphic header structures.
@@ -8073,9 +8425,9 @@ slink:XrCompositionLayerBaseHeader pointer.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
-* [[VUID-XrCompositionLayerBaseHeader-type-type]] pname:type must: be one of the following XrStructureType values: ename:XR_TYPE_COMPOSITION_LAYER_PROJECTION, ename:XR_TYPE_COMPOSITION_LAYER_QUAD, ename:XR_TYPE_COMPOSITION_LAYER_CUBE_KHR, ename:XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR, ename:XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR
-* [[VUID-XrCompositionLayerBaseHeader-next-next]] pname:next must: be code:NULL
-* [[VUID-XrCompositionLayerBaseHeader-layerFlags-parameter]] pname:layerFlags must: be 0 or a valid combination of elink:XrCompositionLayerFlagBits values
+* [[VUID-XrCompositionLayerBaseHeader-type-type]] pname:type must: be one of the following XrStructureType values: ename:XR_TYPE_COMPOSITION_LAYER_CUBE_KHR, ename:XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR, ename:XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR, ename:XR_TYPE_COMPOSITION_LAYER_PROJECTION, ename:XR_TYPE_COMPOSITION_LAYER_QUAD
+* [[VUID-XrCompositionLayerBaseHeader-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrCompositionLayerBaseHeader-layerFlags-parameter]] pname:layerFlags must: be `0` or a valid combination of elink:XrCompositionLayerFlagBits values
* [[VUID-XrCompositionLayerBaseHeader-space-parameter]] pname:space must: be a valid slink:XrSpace handle
****
@@ -8114,7 +8466,6 @@ typedef struct XrSwapchainSubImage {
.Valid Usage (Implicit)
****
* [[VUID-XrSwapchainSubImage-swapchain-parameter]] pname:swapchain must: be a valid slink:XrSwapchain handle
-* [[VUID-XrSwapchainSubImage-imageArrayIndex-parameter]] pname:imageArrayIndex must: be a valid code:uint32_t value
****
--
@@ -8136,7 +8487,7 @@ The slink:XrCompositionLayerProjection structure is defined as:
----
typedef struct XrCompositionLayerProjection {
XrStructureType type;
- const void* XR_MAY_ALIAS next;
+ const void* next;
XrCompositionLayerFlags layerFlags;
XrSpace space;
uint32_t viewCount;
@@ -8151,7 +8502,8 @@ typedef struct XrCompositionLayerProjection {
* pname:layerFlags is a bitmask of elink:XrCompositionLayerFlagBits
describing flags to apply to the layer.
* pname:space is the slink:XrSpace in which the pname:pose of each
- slink:XrCompositionLayerProjectionView is evaluated over time.
+ slink:XrCompositionLayerProjectionView is evaluated over time by the
+ compositor.
* pname:viewCount is the count of views in the pname:views array.
This must: be equal to the number of view poses returned by
flink:xrLocateViews.
@@ -8165,8 +8517,8 @@ typedef struct XrCompositionLayerProjection {
Because a runtime may reproject the layer over time, a projection layer
should specify an slink:XrSpace in which to maximize stability of the layer
content.
-For example, a projection layer containing world-locked content should use a
-slink:XrSpace which is also world-locked, such as the `LOCAL` or `STAGE`
+For example, a projection layer containing world-locked content should use
+an slink:XrSpace which is also world-locked, such as the `LOCAL` or `STAGE`
reference spaces.
In the case that the projection layer should be head-locked, such as a heads
up display, the `VIEW` reference space would provide the highest quality
@@ -8177,12 +8529,11 @@ layer reprojection.
.Valid Usage (Implicit)
****
* [[VUID-XrCompositionLayerProjection-type-type]] pname:type must: be ename:XR_TYPE_COMPOSITION_LAYER_PROJECTION
-* [[VUID-XrCompositionLayerProjection-next-next]] pname:next must: be code:NULL
-* [[VUID-XrCompositionLayerProjection-layerFlags-parameter]] pname:layerFlags must: be 0 or a valid combination of elink:XrCompositionLayerFlagBits values
+* [[VUID-XrCompositionLayerProjection-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrCompositionLayerProjection-layerFlags-parameter]] pname:layerFlags must: be `0` or a valid combination of elink:XrCompositionLayerFlagBits values
* [[VUID-XrCompositionLayerProjection-space-parameter]] pname:space must: be a valid slink:XrSpace handle
-* [[VUID-XrCompositionLayerProjection-viewCount-parameter]] pname:viewCount must: be a valid code:uint32_t value
* [[VUID-XrCompositionLayerProjection-views-parameter]] pname:views must: be a pointer to an array of pname:viewCount valid slink:XrCompositionLayerProjectionView structures
-* [[VUID-XrCompositionLayerProjection-viewCount-arraylength]] pname:viewCount must: be greater than `0`
+* [[VUID-XrCompositionLayerProjection-viewCount-arraylength]] The pname:viewCount parameter must: be greater than `0`
****
--
@@ -8197,11 +8548,11 @@ The slink:XrCompositionLayerProjectionView structure is defined as:
[source,c++]
----
typedef struct XrCompositionLayerProjectionView {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- XrPosef pose;
- XrFovf fov;
- XrSwapchainSubImage subImage;
+ XrStructureType type;
+ const void* next;
+ XrPosef pose;
+ XrFovf fov;
+ XrSwapchainSubImage subImage;
} XrCompositionLayerProjectionView;
----
@@ -8227,16 +8578,14 @@ However, applications may: submit an slink:XrCompositionLayerProjectionView
which has a different view or FOV than that from flink:xrLocateViews.
In this case, the runtime will map the view and FOV to the system display
appropriately.
-In the case that two submitted views within a single layer overlap, they are
-composited in view array order.
-In the case that submitted projection layers overlap, they are composited in
-layer array order.
+In the case that two submitted views within a single layer overlap, they
+must: be composited in view array order.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
* [[VUID-XrCompositionLayerProjectionView-type-type]] pname:type must: be ename:XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW
-* [[VUID-XrCompositionLayerProjectionView-next-next]] pname:next must: be code:NULL or a pointer to a valid instance of slink:XrCompositionLayerDepthInfoKHR
+* [[VUID-XrCompositionLayerProjectionView-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>. See also: slink:XrCompositionLayerDepthInfoKHR
* [[VUID-XrCompositionLayerProjectionView-subImage-parameter]] pname:subImage must: be a valid slink:XrSwapchainSubImage structure
****
@@ -8254,14 +8603,14 @@ The slink:XrCompositionLayerQuad structure defined as:
[source,c++]
----
typedef struct XrCompositionLayerQuad {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- XrCompositionLayerFlags layerFlags;
- XrSpace space;
- XrEyeVisibility eyeVisibility;
- XrSwapchainSubImage subImage;
- XrPosef pose;
- XrVector2f size;
+ XrStructureType type;
+ const void* next;
+ XrCompositionLayerFlags layerFlags;
+ XrSpace space;
+ XrEyeVisibility eyeVisibility;
+ XrSwapchainSubImage subImage;
+ XrPosef pose;
+ XrExtent2Df size;
} XrCompositionLayerQuad;
----
@@ -8277,7 +8626,7 @@ typedef struct XrCompositionLayerQuad {
* pname:subImage is the image layer slink:XrSwapchainSubImage to use.
* pname:pose is an slink:XrPosef defining the position and orientation of
the quad in the reference frame of the pname:space.
-* pname:size is the x and y size of the quad.
+* pname:size is the width and and height of the quad in meters.
****
The slink:XrCompositionLayerQuad layer is useful for user interface elements
@@ -8302,10 +8651,10 @@ its front face normal vector coinciding with the +z axis.
.Valid Usage (Implicit)
****
* [[VUID-XrCompositionLayerQuad-type-type]] pname:type must: be ename:XR_TYPE_COMPOSITION_LAYER_QUAD
-* [[VUID-XrCompositionLayerQuad-next-next]] pname:next must: be code:NULL
-* [[VUID-XrCompositionLayerQuad-layerFlags-parameter]] pname:layerFlags must: be 0 or a valid combination of elink:XrCompositionLayerFlagBits values
+* [[VUID-XrCompositionLayerQuad-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrCompositionLayerQuad-layerFlags-parameter]] pname:layerFlags must: be `0` or a valid combination of elink:XrCompositionLayerFlagBits values
* [[VUID-XrCompositionLayerQuad-space-parameter]] pname:space must: be a valid slink:XrSpace handle
-* [[VUID-XrCompositionLayerQuad-eyeVisibility-parameter]] pname:eyeVisibility must: be a valid slink:XrEyeVisibility value
+* [[VUID-XrCompositionLayerQuad-eyeVisibility-parameter]] pname:eyeVisibility must: be a valid elink:XrEyeVisibility value
* [[VUID-XrCompositionLayerQuad-subImage-parameter]] pname:subImage must: be a valid slink:XrSwapchainSubImage structure
****
@@ -8375,7 +8724,7 @@ For example, a VR headset may not support the
ename:XR_ENVIRONMENT_BLEND_MODE_ADDITIVE or
ename:XR_ENVIRONMENT_BLEND_MODE_ALPHA_BLEND modes unless it has video
passthrough, while an AR headset with an additive display may not support
-the the ename:XR_ENVIRONMENT_BLEND_MODE_OPAQUE or
+the ename:XR_ENVIRONMENT_BLEND_MODE_OPAQUE or
ename:XR_ENVIRONMENT_BLEND_MODE_ALPHA_BLEND modes.
For devices that can support multiple environment blend modes, such as AR
@@ -8392,7 +8741,7 @@ layers.
[open,refpage='xrEnumerateEnvironmentBlendModes',desc='Lists environment blend modes',type='protos',xrefs='XrEnvironmentBlendMode']
--
-The flink:xrEnumerateEnvironmentBlendModes function is defined as follows.
+The flink:xrEnumerateEnvironmentBlendModes function is defined as:
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[xrEnumerateEnvironmentBlendModes,xrEnumerateEnvironmentBlendModes]]
@@ -8401,6 +8750,7 @@ The flink:xrEnumerateEnvironmentBlendModes function is defined as follows.
XrResult xrEnumerateEnvironmentBlendModes(
XrInstance instance,
XrSystemId systemId,
+ XrViewConfigurationType viewConfigurationType,
uint32_t environmentBlendModeCapacityInput,
uint32_t* environmentBlendModeCountOutput,
XrEnvironmentBlendMode* environmentBlendModes);
@@ -8411,6 +8761,8 @@ XrResult xrEnumerateEnvironmentBlendModes(
* pname:instance is the instance from which pname:systemId was retrieved.
* pname:systemId is the basetype:XrSystemId whose environment blend modes
will be enumerated.
+* pname:viewConfigurationType is the elink:XrViewConfigurationType to
+ enumerate.
* pname:environmentBlendModeCapacityInput is the capacity of the
pname:environmentBlendModes array, or 0 to indicate a request to retrieve
the required capacity.
@@ -8426,15 +8778,21 @@ XrResult xrEnumerateEnvironmentBlendModes(
****
Enumerates the set of environment blend modes that this runtime supports for
-a given system.
+a given view configuration of the system.
+Environment blend modes should: be in order from highest to lowest runtime
+preference.
+
+Runtimes must: always return identical buffer contents from this enumeration
+for the given pname:systemId and pname:viewConfigurationType for the
+lifetime of the instance.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
* [[VUID-xrEnumerateEnvironmentBlendModes-instance-parameter]] pname:instance must: be a valid slink:XrInstance handle
-* [[VUID-xrEnumerateEnvironmentBlendModes-environmentBlendModeCapacityInput-parameter]] If pname:environmentBlendModeCapacityInput is not `0`, pname:environmentBlendModeCapacityInput must: be a valid code:uint32_t value
-* [[VUID-xrEnumerateEnvironmentBlendModes-environmentBlendModeCountOutput-parameter]] If pname:environmentBlendModeCountOutput is not code:NULL, pname:environmentBlendModeCountOutput must: be a pointer to a code:uint32_t value
-* [[VUID-xrEnumerateEnvironmentBlendModes-environmentBlendModes-parameter]] If pname:environmentBlendModeCapacityInput is not `0`, pname:environmentBlendModes must: be a pointer to an array of pname:environmentBlendModeCapacityInput slink:XrEnvironmentBlendMode values
+* [[VUID-xrEnumerateEnvironmentBlendModes-viewConfigurationType-parameter]] pname:viewConfigurationType must: be a valid elink:XrViewConfigurationType value
+* [[VUID-xrEnumerateEnvironmentBlendModes-environmentBlendModeCountOutput-parameter]] pname:environmentBlendModeCountOutput must: be a pointer to a code:uint32_t value
+* [[VUID-xrEnumerateEnvironmentBlendModes-environmentBlendModes-parameter]] If pname:environmentBlendModeCapacityInput is not `0`, pname:environmentBlendModes must: be a pointer to an array of pname:environmentBlendModeCapacityInput elink:XrEnvironmentBlendMode values
****
.Return Codes
@@ -8447,12 +8805,12 @@ a given system.
* ename:XR_ERROR_HANDLE_INVALID
* ename:XR_ERROR_SYSTEM_INVALID
* ename:XR_ERROR_VALIDATION_FAILURE
+* ename:XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED
* ename:XR_ERROR_SIZE_INSUFFICIENT
****
--
-
[open,refpage='XrEnvironmentBlendMode',desc='Environment blend modes',type='enums',xrefs='xrEnumerateEnvironmentBlendModes XrFrameEndInfo']
--
@@ -8507,8 +8865,8 @@ typedef enum XrEnvironmentBlendMode {
OpenXR applications communicate with input devices using XrActions.
Actions are created at initialization time and later used to request input
device state, create action spaces, or control haptic events.
-Input action handles represent 'actions' that the game is interested in
-obtaining the state of, not direct input device hardware.
+Input action handles represent 'actions' that the application is interested
+in obtaining the state of, not direct input device hardware.
For example, instead of the application directly querying the state of the A
button when interacting with a menu, an OpenXR application instead creates a
actionname:menu_select action at startup then asks OpenXR for the state of
@@ -8524,45 +8882,41 @@ input hardware and maximize user accessibility.
Example usage:
-[source,C]
+[source,C++]
----
XrInstance instance; // previously initialized
XrSession session; // previously initialized
// Create an action set
-XrActionSetCreateInfo actionSetInfo = {0};
-actionSetInfo.type = XR_TYPE_ACTION_SET_CREATE_INFO;
-strcpy(actionSetInfo.actionSetName, "gameplay" );
-strcpy(actionSetInfo.localizedActionSetName, "Gameplay" );
+XrActionSetCreateInfo actionSetInfo{XR_TYPE_ACTION_SET_CREATE_INFO};
+strcpy(actionSetInfo.actionSetName, "gameplay");
+strcpy(actionSetInfo.localizedActionSetName, "Gameplay");
+actionSetInfo.priority = 0;
XrActionSet inGameActionSet;
-CHK_XR(xrCreateActionSet( session, &actionSetInfo, &inGameActionSet ));
+CHK_XR(xrCreateActionSet(instance, &actionSetInfo, &inGameActionSet));
// create a "teleport" input action
-XrActionCreateInfo actioninfo = {0};
-actioninfo.type = XR_TYPE_ACTION_CREATE_INFO;
-strcpy(actioninfo.actionName, "teleport" );
-actioninfo.actionType = XR_INPUT_ACTION_TYPE_BOOLEAN;
-strcpy(actioninfo.localizedActionName, "Teleport" );
-
+XrActionCreateInfo actioninfo{XR_TYPE_ACTION_CREATE_INFO};
+strcpy(actioninfo.actionName, "teleport");
+actioninfo.actionType = XR_ACTION_TYPE_BOOLEAN_INPUT;
+strcpy(actioninfo.localizedActionName, "Teleport");
XrAction teleportAction;
-CHK_XR(xrCreateAction( inGameActionSet, &actioninfo, &teleportAction ));
+CHK_XR(xrCreateAction(inGameActionSet, &actioninfo, &teleportAction));
// create a "player_hit" output action
-XrActionCreateInfo hapticsactioninfo = {0};
-hapticsactioninfo.type = XR_TYPE_ACTION_CREATE_INFO;
-strcpy(hapticsactioninfo.actionName, "player_hit" );
-hapticsactioninfo.actionType = XR_OUTPUT_ACTION_TYPE_VIBRATION;
-strcpy(hapticsactioninfo.localizedActionName, "Player hit" );
-
+XrActionCreateInfo hapticsactioninfo{XR_TYPE_ACTION_CREATE_INFO};
+strcpy(hapticsactioninfo.actionName, "player_hit");
+hapticsactioninfo.actionType = XR_ACTION_TYPE_VIBRATION_OUTPUT;
+strcpy(hapticsactioninfo.localizedActionName, "Player hit");
XrAction hapticsAction;
-CHK_XR(xrCreateAction( inGameActionSet, &hapticsactioninfo, &hapticsAction ));
+CHK_XR(xrCreateAction(inGameActionSet, &hapticsactioninfo, &hapticsAction));
XrPath triggerClickPath, hapticPath;
-CHK_XR(xrStringToPath( instance, "/user/hand/right/input/trigger/click", &triggerClickPath ));
-CHK_XR(xrStringToPath( instance, "/user/hand/right/output/haptic", &hapticPath ))
+CHK_XR(xrStringToPath(instance, "/user/hand/right/input/trigger/click", &triggerClickPath));
+CHK_XR(xrStringToPath(instance, "/user/hand/right/output/haptic", &hapticPath))
XrPath interactionProfilePath;
-CHK_XR(xrStringToPath( instance, "/interaction_profiles/vendor_x/profile_x", &interactionProfilePath ));
+CHK_XR(xrStringToPath(instance, "/interaction_profiles/vendor_x/profile_x", &interactionProfilePath));
XrActionSuggestedBinding bindings[2];
bindings[0].action = teleportAction;
@@ -8570,38 +8924,44 @@ bindings[0].binding = triggerClickPath;
bindings[1].action = hapticsAction;
bindings[1].binding = hapticPath;
-XrInteractionProfileSuggestedBinding suggestedBindings = {0};
-suggestedBindings.type = XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING;
+XrInteractionProfileSuggestedBinding suggestedBindings{XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING};
suggestedBindings.interactionProfile = interactionProfilePath;
suggestedBindings.suggestedBindings = bindings;
suggestedBindings.countSuggestedBindings = 2;
+CHK_XR(xrSuggestInteractionProfileBindings(instance, &suggestedBindings));
-CHK_XR(xrSetInteractionProfileSuggestedBindings( session, &suggestedBindings ));
+XrSessionActionSetsAttachInfo attachInfo{XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO};
+attachInfo.countActionSets = 1;
+attachInfo.actionSets = &inGameActionSet;
+CHK_XR(xrAttachSessionActionSets(session, &attachInfo));
// application main loop
-while( 1 )
+while (1)
{
- // sync action data
- XrActiveActionSet activeActionSet = {0};
- activeActionSet.type = XR_TYPE_ACTIVE_ACTION_SET;
- activeActionSet.actionSet = inGameActionSet;
- activeActionSet.subactionPath = XR_NULL_PATH;
- CHK_XR(xrSyncActionData( session, 1, &activeActionSet) );
+ // sync action data
+ XrActiveActionSet activeActionSet{inGameActionSet, XR_NULL_PATH};
+ XrActionsSyncInfo syncInfo{XR_TYPE_ACTIONS_SYNC_INFO};
+ syncInfo.countActiveActionSets = 1;
+ syncInfo.activeActionSets = &activeActionSet;
+ CHK_XR(xrSyncActions(session, &syncInfo));
- // query input action state
- XrActionStateBoolean teleportState;
- CHK_XR(xrGetActionStateBoolean( teleportAction, 0, NULL, &teleportState ));
+ // query input action state
+ XrActionStateBoolean teleportState{XR_TYPE_ACTION_STATE_BOOLEAN};
+ XrActionStateGetInfo getInfo{XR_TYPE_ACTION_STATE_GET_INFO};
+ getInfo.action = teleportAction;
+ CHK_XR(xrGetActionStateBoolean(session, &getInfo, &teleportState));
- if ( teleportState.changedSinceLastSync && teleportState.currentState )
- {
- // fire haptics using output action
- XrHapticVibration vibration = {0};
- vibration.type = XR_TYPE_HAPTIC_VIBRATION;
- vibration.amplitude = 0.5;
- vibration.duration = 300;
- vibration.frequency = 3000;
- CHK_XR(xrApplyHapticFeedback( hapticsAction, 0, NULL, (const XrHapticBaseHeader*)&vibration ));
- }
+ if (teleportState.changedSinceLastSync && teleportState.currentState)
+ {
+ // fire haptics using output action
+ XrHapticVibration vibration{XR_TYPE_HAPTIC_VIBRATION};
+ vibration.amplitude = 0.5;
+ vibration.duration = 300;
+ vibration.frequency = 3000;
+ XrHapticActionInfo hapticActionInfo{XR_TYPE_HAPTIC_ACTION_INFO};
+ hapticActionInfo.action = hapticsAction;
+ CHK_XR(xrApplyHapticFeedback(session, &hapticActionInfo, (const XrHapticBaseHeader*)&vibration));
+ }
}
----
@@ -8620,7 +8980,9 @@ XR_DEFINE_HANDLE(XrActionSet)
----
Action sets are application-defined collections of actions.
-They are enabled or disabled by the application via flink:xrSyncActionData
+They are attached to a given slink:XrSession with a
+flink:xrAttachSessionActionSets call.
+They are enabled or disabled by the application via flink:xrSyncActions
depending on the current application context.
For example, a game may have one set of actions that apply to controlling a
character and another set for navigating a menu system.
@@ -8642,14 +9004,14 @@ The flink:xrCreateActionSet function is defined as:
[source,c++]
----
XrResult xrCreateActionSet(
- XrSession session,
+ XrInstance instance,
const XrActionSetCreateInfo* createInfo,
XrActionSet* actionSet);
----
.Parameter Descriptions
****
-* pname:session is a handle to an slink:XrSession.
+* pname:instance is a handle to an slink:XrInstance.
* pname:createInfo is a pointer to a valid slink:XrActionSetCreateInfo
structure that defines the action set being created.
* pname:actionSet is a pointer to an slink:XrActionSet where the created
@@ -8658,14 +9020,11 @@ XrResult xrCreateActionSet(
The flink:xrCreateActionSet function creates an action set and returns a
handle to the created action set.
-If pname:session is running when this call is made, the runtime must: return
-ename:XR_ERROR_SESSION_RUNNING.
-Additional error codes are described with slink:XrActionSetCreateInfo.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
-* [[VUID-xrCreateActionSet-session-parameter]] pname:session must: be a valid slink:XrSession handle
+* [[VUID-xrCreateActionSet-instance-parameter]] pname:instance must: be a valid slink:XrInstance handle
* [[VUID-xrCreateActionSet-createInfo-parameter]] pname:createInfo must: be a pointer to a valid slink:XrActionSetCreateInfo structure
* [[VUID-xrCreateActionSet-actionSet-parameter]] pname:actionSet must: be a pointer to an slink:XrActionSet handle
****
@@ -8674,14 +9033,11 @@ Additional error codes are described with slink:XrActionSetCreateInfo.
****
<<fundamentals-successcodes,Success>>::
* ename:XR_SUCCESS
-* ename:XR_SESSION_LOSS_PENDING
<<fundamentals-errorcodes,Failure>>::
* ename:XR_ERROR_INSTANCE_LOST
-* ename:XR_ERROR_SESSION_LOST
* ename:XR_ERROR_RUNTIME_FAILURE
* ename:XR_ERROR_LIMIT_REACHED
* ename:XR_ERROR_HANDLE_INVALID
-* ename:XR_ERROR_SESSION_RUNNING
* ename:XR_ERROR_OUT_OF_MEMORY
* ename:XR_ERROR_VALIDATION_FAILURE
* ename:XR_ERROR_NAME_DUPLICATED
@@ -8694,17 +9050,17 @@ Additional error codes are described with slink:XrActionSetCreateInfo.
[open,refpage='XrActionSetCreateInfo',desc='XrActionSet creation info',type='structs',xrefs='XrActionSet xrCreateActionSet']
--
-The slink:XrActionSetCreateInfo is defined as:
+The slink:XrActionSetCreateInfo structure is defined as:
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[XrActionSetCreateInfo,XrActionSetCreateInfo]]
[source,c++]
----
typedef struct XrActionSetCreateInfo {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- char actionSetName[XR_MAX_ACTION_SET_NAME_SIZE];
- char localizedActionSetName[XR_MAX_LOCALIZED_ACTION_SET_NAME_SIZE];
- uint32_t priority;
+ XrStructureType type;
+ const void* next;
+ char actionSetName[XR_MAX_ACTION_SET_NAME_SIZE];
+ char localizedActionSetName[XR_MAX_LOCALIZED_ACTION_SET_NAME_SIZE];
+ uint32_t priority;
} XrActionSetCreateInfo;
----
@@ -8726,9 +9082,9 @@ typedef struct XrActionSetCreateInfo {
When multiple actions are bound to the same input source, the pname:priority
of each action set determines which bindings are suppressed.
-Runtimes must: ignore bindings from action sets with a lower priority number
-if those specific bindings are also present in active actions within a
-higher priority action set.
+Runtimes must: ignore input sources from action sets with a lower priority
+number if those specific input sources are also present in active actions
+within a higher priority action set.
If multiple action sets with the same priority are bound to the same input
source and that is the highest priority number, runtimes must: process all
those bindings at the same time.
@@ -8739,17 +9095,21 @@ segments, even if they have different component segments.
When runtimes are ignoring bindings because of priority, they must: treat
the binding to that input source as though they do not exist.
-That means the pname:isActive field must: be false when retrieving action
-data, and that the runtime must: not provide any visual, haptic, or other
-feedback related to the binding of that action to that input source.
+That means the pname:isActive field must: be ename:XR_FALSE when retrieving
+action data, and that the runtime must: not provide any visual, haptic, or
+other feedback related to the binding of that action to that input source.
Other actions in the same action set which are bound to input sources that
do not collide are not affected and are processed as normal.
If pname:actionSetName or pname:localizedActionSetName are empty strings,
-the runtime must: return ename:XR_ERROR_NAME_INVALID.
+the runtime must: return ename:XR_ERROR_NAME_INVALID or
+ename:XR_ERROR_LOCALIZED_NAME_INVALID respectively.
If pname:actionSetName or pname:localizedActionSetName are duplicates of the
corresponding field for any existing action set in the specified session,
-the runtime must: return ename:XR_ERROR_NAME_DUPLICATED.
+the runtime must: return ename:XR_ERROR_NAME_DUPLICATED or
+ename:XR_ERROR_LOCALIZED_NAME_DUPLICATED respectively.
+If the conflicting action set is destroyed, the conflicting field is no
+longer considered duplicated.
If pname:actionSetName contains characters which are not allowed in a single
level of a <<well-formed-path-strings, well-formed path string>>, the
runtime must: return ename:XR_ERROR_PATH_FORMAT_INVALID.
@@ -8758,10 +9118,9 @@ runtime must: return ename:XR_ERROR_PATH_FORMAT_INVALID.
.Valid Usage (Implicit)
****
* [[VUID-XrActionSetCreateInfo-type-type]] pname:type must: be ename:XR_TYPE_ACTION_SET_CREATE_INFO
-* [[VUID-XrActionSetCreateInfo-next-next]] pname:next must: be code:NULL
-* [[VUID-XrActionSetCreateInfo-actionSetName-parameter]] pname:actionSetName must: be a null-terminated UTF-8 string whose length is less than or equal to XR_MAX_ACTION_SET_NAME_SIZE
-* [[VUID-XrActionSetCreateInfo-localizedActionSetName-parameter]] pname:localizedActionSetName must: be a null-terminated UTF-8 string whose length is less than or equal to XR_MAX_LOCALIZED_ACTION_SET_NAME_SIZE
-* [[VUID-XrActionSetCreateInfo-priority-parameter]] pname:priority must: be a valid code:uint32_t value
+* [[VUID-XrActionSetCreateInfo-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrActionSetCreateInfo-actionSetName-parameter]] pname:actionSetName must: be a null-terminated UTF-8 string whose length is less than or equal to ename:XR_MAX_ACTION_SET_NAME_SIZE
+* [[VUID-XrActionSetCreateInfo-localizedActionSetName-parameter]] pname:localizedActionSetName must: be a null-terminated UTF-8 string whose length is less than or equal to ename:XR_MAX_LOCALIZED_ACTION_SET_NAME_SIZE
****
--
@@ -8783,11 +9142,18 @@ XrResult xrDestroyActionSet(
* pname:actionSet is the action set to destroy.
****
-Action sets can be destroyed by calling flink:xrDestroyActionSet.
-When an action set is destroyed, all actions of that action set are also
-destroyed.
-If the application subsequently attempts to destroy one of these actions via
-flink:xrDestroyAction then ename:XR_ERROR_HANDLE_INVALID is returned.
+Action set handles can: be destroyed by calling flink:xrDestroyActionSet.
+When an action set handle is destroyed, all handles of actions in that
+action set are also destroyed.
+
+The implementation must: not free underlying resources for the action set
+while there are other valid handles that refer to those resources.
+The implementation may: release resources for an action set when all of the
+action spaces for actions in that action set have been destroyed.
+See <<spaces-action-spaces-lifetime, Action Spaces Lifetime>> for details.
+
+Resources for all action sets in an instance must: be freed when the
+instance containing those actions sets is destroyed.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
@@ -8795,15 +9161,17 @@ flink:xrDestroyAction then ename:XR_ERROR_HANDLE_INVALID is returned.
* [[VUID-xrDestroyActionSet-actionSet-parameter]] pname:actionSet must: be a valid slink:XrActionSet handle
****
+.Thread Safety
+****
+* Access to pname:actionSet, and any child handles, must: be externally synchronized
+****
+
.Return Codes
****
<<fundamentals-successcodes,Success>>::
* ename:XR_SUCCESS
<<fundamentals-errorcodes,Failure>>::
-* ename:XR_ERROR_INSTANCE_LOST
-* ename:XR_ERROR_RUNTIME_FAILURE
* ename:XR_ERROR_HANDLE_INVALID
-* ename:XR_ERROR_VALIDATION_FAILURE
****
--
@@ -8849,8 +9217,10 @@ XrResult xrCreateAction(
****
flink:xrCreateAction creates an action and returns its handle.
-If the session containing pname:actionSet is running when this call is made,
-the runtime must: return ename:XR_ERROR_SESSION_RUNNING.
+
+If pname:actionSet has been included in a call to
+flink:xrAttachSessionActionSets, the implementation must: return
+ename:XR_ERROR_ACTIONSETS_ALREADY_ATTACHED.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
@@ -8864,20 +9234,19 @@ the runtime must: return ename:XR_ERROR_SESSION_RUNNING.
****
<<fundamentals-successcodes,Success>>::
* ename:XR_SUCCESS
-* ename:XR_SESSION_LOSS_PENDING
<<fundamentals-errorcodes,Failure>>::
* ename:XR_ERROR_INSTANCE_LOST
-* ename:XR_ERROR_SESSION_LOST
* ename:XR_ERROR_RUNTIME_FAILURE
+* ename:XR_ERROR_ACTIONSETS_ALREADY_ATTACHED
* ename:XR_ERROR_LIMIT_REACHED
* ename:XR_ERROR_HANDLE_INVALID
* ename:XR_ERROR_OUT_OF_MEMORY
* ename:XR_ERROR_PATH_INVALID
-* ename:XR_ERROR_SESSION_RUNNING
* ename:XR_ERROR_VALIDATION_FAILURE
* ename:XR_ERROR_NAME_DUPLICATED
* ename:XR_ERROR_NAME_INVALID
* ename:XR_ERROR_PATH_FORMAT_INVALID
+* ename:XR_ERROR_PATH_UNSUPPORTED
****
--
@@ -8891,13 +9260,13 @@ The slink:XrActionCreateInfo structure is defined as:
[source,c++]
----
typedef struct XrActionCreateInfo {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- char actionName[XR_MAX_ACTION_NAME_SIZE];
- XrActionType actionType;
- uint32_t countSubactionPaths;
- const XrPath* subactionPaths;
- char localizedActionName[XR_MAX_LOCALIZED_ACTION_NAME_SIZE];
+ XrStructureType type;
+ const void* next;
+ char actionName[XR_MAX_ACTION_NAME_SIZE];
+ XrActionType actionType;
+ uint32_t countSubactionPaths;
+ const XrPath* subactionPaths;
+ char localizedActionName[XR_MAX_LOCALIZED_ACTION_NAME_SIZE];
} XrActionCreateInfo;
----
@@ -8934,12 +9303,12 @@ actionname:pick_up_with_left_hand and actionname:pick_up_with_right_hand.
Applications can: create actions with or without the pname:subactionPaths
set to a list of paths.
If this list of paths is omitted (i.e. pname:subactionPaths is set to
-code:NULL, and pname:countSubactionPaths is set to 0), the application is
+code:NULL, and pname:countSubactionPaths is set to `0`), the application is
opting out of filtering action results by subaction paths and any call to
get action data must also omit subaction paths.
If pname:subactionPaths is specified and any of the following conditions are
-not satisfied, the runtime must: return ename:XR_ERROR_PATH_INVALID:
+not satisfied, the runtime must: return ename:XR_ERROR_PATH_UNSUPPORTED:
* Each path provided is one of:
** pathname:/user/head
@@ -8957,7 +9326,7 @@ are not included in the other subaction paths into the pathname:/user
bucket.
Extensions may: append additional top level user paths to the above list.
-The runtime must: return ename:XR_ERROR_PATH_INVALID in the following
+The runtime must: return ename:XR_ERROR_PATH_UNSUPPORTED in the following
circumstances:
* The application specified subaction paths at action creation and the
@@ -8967,10 +9336,14 @@ circumstances:
subaction path that was not specified when the action was created.
If pname:actionName or pname:localizedActionName are empty strings, the
-runtime must: return ename:XR_ERROR_NAME_INVALID.
+runtime must: return ename:XR_ERROR_NAME_INVALID or
+ename:XR_ERROR_LOCALIZED_NAME_INVALID respectively.
If pname:actionName or pname:localizedActionName are duplicates of the
corresponding field for any existing action in the specified action set, the
-runtime must: return ename:XR_ERROR_NAME_DUPLICATED.
+runtime must: return ename:XR_ERROR_NAME_DUPLICATED or
+ename:XR_ERROR_LOCALIZED_NAME_DUPLICATED respectively.
+If the conflicting action is destroyed, the conflicting field is no longer
+considered duplicated.
If pname:actionName contains characters which are not allowed in a single
level of a <<well-formed-path-strings, well-formed path string>>, the
runtime must: return ename:XR_ERROR_PATH_FORMAT_INVALID.
@@ -8979,12 +9352,11 @@ runtime must: return ename:XR_ERROR_PATH_FORMAT_INVALID.
.Valid Usage (Implicit)
****
* [[VUID-XrActionCreateInfo-type-type]] pname:type must: be ename:XR_TYPE_ACTION_CREATE_INFO
-* [[VUID-XrActionCreateInfo-next-next]] pname:next must: be code:NULL
-* [[VUID-XrActionCreateInfo-actionName-parameter]] pname:actionName must: be a null-terminated UTF-8 string whose length is less than or equal to XR_MAX_ACTION_NAME_SIZE
-* [[VUID-XrActionCreateInfo-actionType-parameter]] pname:actionType must: be a valid slink:XrActionType value
-* [[VUID-XrActionCreateInfo-countSubactionPaths-parameter]] If pname:countSubactionPaths is not `0`, pname:countSubactionPaths must: be a valid code:uint32_t value
-* [[VUID-XrActionCreateInfo-subactionPaths-parameter]] If pname:countSubactionPaths is not `0`, pname:subactionPaths must: be a pointer to an array of pname:countSubactionPaths basetype:XrPath values
-* [[VUID-XrActionCreateInfo-localizedActionName-parameter]] pname:localizedActionName must: be a null-terminated UTF-8 string whose length is less than or equal to XR_MAX_LOCALIZED_ACTION_NAME_SIZE
+* [[VUID-XrActionCreateInfo-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrActionCreateInfo-actionName-parameter]] pname:actionName must: be a null-terminated UTF-8 string whose length is less than or equal to ename:XR_MAX_ACTION_NAME_SIZE
+* [[VUID-XrActionCreateInfo-actionType-parameter]] pname:actionType must: be a valid elink:XrActionType value
+* [[VUID-XrActionCreateInfo-subactionPaths-parameter]] If pname:countSubactionPaths is not `0`, pname:subactionPaths must: be a pointer to an array of pname:countSubactionPaths valid basetype:XrPath values
+* [[VUID-XrActionCreateInfo-localizedActionName-parameter]] pname:localizedActionName must: be a null-terminated UTF-8 string whose length is less than or equal to ename:XR_MAX_LOCALIZED_ACTION_NAME_SIZE
****
--
@@ -8998,30 +9370,30 @@ The elink:XrActionType parameter takes one of the following values:
[source,c++]
----
typedef enum XrActionType {
- XR_INPUT_ACTION_TYPE_BOOLEAN = 1,
- XR_INPUT_ACTION_TYPE_VECTOR1F = 2,
- XR_INPUT_ACTION_TYPE_VECTOR2F = 3,
- XR_INPUT_ACTION_TYPE_POSE = 4,
- XR_OUTPUT_ACTION_TYPE_VIBRATION = 100,
+ XR_ACTION_TYPE_BOOLEAN_INPUT = 1,
+ XR_ACTION_TYPE_FLOAT_INPUT = 2,
+ XR_ACTION_TYPE_VECTOR2F_INPUT = 3,
+ XR_ACTION_TYPE_POSE_INPUT = 4,
+ XR_ACTION_TYPE_VIBRATION_OUTPUT = 100,
XR_ACTION_TYPE_MAX_ENUM = 0x7FFFFFFF
} XrActionType;
----
.Enumerant Descriptions
****
-* ename:XR_INPUT_ACTION_TYPE_BOOLEAN.
+* ename:XR_ACTION_TYPE_BOOLEAN_INPUT.
The action can be passed to flink:xrGetActionStateBoolean to retrieve a
- single boolean value.
-* ename:XR_INPUT_ACTION_TYPE_VECTOR1F.
- The action can be passed to flink:xrGetActionStateVector1f to retrieve a
- 1D float vector.
-* ename:XR_INPUT_ACTION_TYPE_VECTOR2F.
+ boolean value.
+* ename:XR_ACTION_TYPE_FLOAT_INPUT.
+ The action can be passed to flink:xrGetActionStateFloat to retrieve a
+ float value.
+* ename:XR_ACTION_TYPE_VECTOR2F_INPUT.
The action can be passed to flink:xrGetActionStateVector2f to retrieve a
2D float vector.
-* ename:XR_INPUT_ACTION_TYPE_POSE.
+* ename:XR_ACTION_TYPE_POSE_INPUT.
The action can can be passed to flink:xrCreateActionSpace to create a
space.
-* ename:XR_OUTPUT_ACTION_TYPE_VIBRATION.
+* ename:XR_ACTION_TYPE_VIBRATION_OUTPUT.
The action can be passed to flink:xrApplyHapticFeedback to send a haptic
event to the runtime.
****
@@ -9045,12 +9417,20 @@ XrResult xrDestroyAction(
* pname:action is the action to destroy.
****
-Actions can: be destroyed by calling flink:xrDestroyAction.
-When an action is destroyed, it is removed from its associated action set.
-Alternatively, actions that are part of an action set are automatically
-destroyed when the action set is destroyed.
+Action handles can: be destroyed by calling flink:xrDestroyAction.
+Handles for actions that are part of an action set are automatically
+destroyed when the action set's handle is destroyed.
-The runtime must: ignore destroyed actions in action sets.
+The implementation must: not destroy the underlying resources for an action
+when flink:xrDestroyAction is called.
+Those resources are still used to make <<spaces-action-spaces-lifetime,
+action spaces locatable>> and when processing action priority in
+flink:xrSyncActions.
+Destroying the action handle removes the application's access to these
+resources, but has no other change on actions.
+
+Resources for all actions in an instance must: be freed when the instance
+containing those actions sets is destroyed.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
@@ -9058,15 +9438,17 @@ The runtime must: ignore destroyed actions in action sets.
* [[VUID-xrDestroyAction-action-parameter]] pname:action must: be a valid slink:XrAction handle
****
+.Thread Safety
+****
+* Access to pname:action, and any child handles, must: be externally synchronized
+****
+
.Return Codes
****
<<fundamentals-successcodes,Success>>::
* ename:XR_SUCCESS
<<fundamentals-errorcodes,Failure>>::
-* ename:XR_ERROR_INSTANCE_LOST
-* ename:XR_ERROR_RUNTIME_FAILURE
* ename:XR_ERROR_HANDLE_INVALID
-* ename:XR_ERROR_VALIDATION_FAILURE
****
--
@@ -9091,11 +9473,13 @@ Applications usually need to provide default bindings for their actions to
runtimes so that input data can be mapped appropriately to the application's
actions.
Applications can: do this by calling
-flink:xrSetInteractionProfileSuggestedBindings for each
+flink:xrSuggestInteractionProfileBindings for each
<<semantic-path-interaction-profiles, interaction profile>> that the
applications has default bindings for.
If bindings are provided for an appropriate interaction profile, the runtime
-will select one and input will begin to flow.
+may: select one and input will begin to flow.
+Interaction profile selection changes must: only happen when
+flink:xrSyncActions is called.
Applications can: call flink:xrGetCurrentInteractionProfile during on a
running session to learn what the active interaction profile are for a top
level user path.
@@ -9110,12 +9494,14 @@ If the runtime is using the values provided by suggested bindings, it must:
make a best effort to convert the input value to the created action and
apply certain rules to that use so that suggested bindings function in the
same way across runtimes.
+If an input value cannot be converted to the type of the action, the value
+must: be ignored and not contribute to the state of the action.
-For actions created with ename:XR_INPUT_ACTION_TYPE_BOOLEAN when the runtime
-is obeying suggested bindings: Boolean input sources are bound directly to
-the action.
+For actions created with ename:XR_ACTION_TYPE_BOOLEAN_INPUT when the runtime
+is obeying suggested bindings: Boolean input sources must: be bound directly
+to the action.
If the path is to a scalar value, a threshold must: be applied to the value
-and values over that threshold will be true.
+and values over that threshold will be ename:XR_TRUE.
The threshold may vary from device to device or component to component and
is left as an implementation detail.
If the path refers to the parent of input values instead of to an input
@@ -9124,40 +9510,41 @@ of subpathname:/example/path if it is available and apply the same
thresholding that would be applied to any scalar input.
If a parent path does not have a subpathname:/value subpath, the runtime
must: use subpathname:/click.
-In any other situation the runtime would need to provide an alternate
-binding for the action or it will be unbound.
+In any other situation the runtime may: provide an alternate binding for the
+action or it will be unbound.
-For actions created with ename:XR_INPUT_ACTION_TYPE_VECTOR1F when the
-runtime is obeying suggested bindings: If the input value specified by the
-path is scalar, the input value is bound directly to the vector.
+For actions created with ename:XR_ACTION_TYPE_FLOAT_INPUT when the runtime
+is obeying suggested bindings: If the input value specified by the path is
+scalar, the input value must: be bound directly to the float.
If the path refers to the parent of input values instead of to an input
value itself, the runtime must: use pathname:/example/path/value instead of
subpathname:/example/path as the source of the value.
If the input value is boolean, the runtime must: supply 0.0 or 1.0 as a
conversion of the boolean value.
-In any other situation, the runtime would need to provide an alternate
-binding for the action or it will be unbound.
+In any other situation, the runtime may: provide an alternate binding for
+the action or it will be unbound.
-For actions created with ename:XR_INPUT_ACTION_TYPE_VECTOR2F when the
-runtime is obeying suggested bindings: The suggested binding path must refer
-to the parent of input values instead of to the input values themselves, and
-that parent path must contain subpaths subpathname:/x and subpathname:/y.
+For actions created with ename:XR_ACTION_TYPE_VECTOR2F_INPUT when the
+runtime is obeying suggested bindings: The suggested binding path must:
+refer to the parent of input values instead of to the input values
+themselves, and that parent path must: contain subpaths subpathname:/x and
+subpathname:/y.
subpathname:/x and subpathname:/y must: be bound to 'x' and 'y' of the
vector, respectively.
-In any other situation, the runtime would need to provide an alternate
-binding for the action or it will be unbound.
+In any other situation, the runtime may: provide an alternate binding for
+the action or it will be unbound.
-For actions created with ename:XR_INPUT_ACTION_TYPE_POSE when the runtime is
-obeying suggested bindings: Pose input sources are bound directly to the
-action.
+For actions created with ename:XR_ACTION_TYPE_POSE_INPUT when the runtime is
+obeying suggested bindings: Pose input sources must: be bound directly to
+the action.
If the path refers to the parent of input values instead of to an input
-value itself, the runtime must; use subpathname:/example/path/pose instead
+value itself, the runtime must: use subpathname:/example/path/pose instead
of pathname:/example/path if it is available.
-In any other situation the runtime would need to provide an alternate
-binding for the action or it will be unbound.
+In any other situation the runtime may: provide an alternate binding for the
+action or it will be unbound.
-[open,refpage='XrEventDataInteractionProfileChanged',desc='Notifies the application than the active interaction profile has changed',type='structs',xrefs='xrSetInteractionProfileSuggestedBindings xrGetCurrentInteractionProfile']
+[open,refpage='XrEventDataInteractionProfileChanged',desc='Notifies the application than the active interaction profile has changed',type='structs',xrefs='xrSuggestInteractionProfileBindings xrGetCurrentInteractionProfile']
--
The slink:XrEventDataInteractionProfileChanged structure is defined as:
@@ -9166,8 +9553,9 @@ The slink:XrEventDataInteractionProfileChanged structure is defined as:
[source,c++]
----
typedef struct XrEventDataInteractionProfileChanged {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
+ XrStructureType type;
+ const void* next;
+ XrSession session;
} XrEventDataInteractionProfileChanged;
----
@@ -9175,14 +9563,15 @@ typedef struct XrEventDataInteractionProfileChanged {
****
* pname:type is the elink:XrStructureType of this structure.
* pname:next is code:NULL or a pointer to an extension-specific structure.
+* pname:session is the slink:XrSession for which at least one of the
+ interaction profiles for a top level path has changed.
****
The slink:XrEventDataInteractionProfileChanged event is sent to the
application to notify it that the active input form factor for one or more
top level user paths has changed.
This event must: only be sent for interaction profiles that the application
-indicated its support for via
-flink:xrSetInteractionProfileSuggestedBindings.
+indicated its support for via flink:xrSuggestInteractionProfileBindings.
This event must: only be sent for running sessions.
The application can: call flink:xrGetCurrentInteractionProfile if it wants
@@ -9192,73 +9581,83 @@ to change its own behavior based on the active hardware.
.Valid Usage (Implicit)
****
* [[VUID-XrEventDataInteractionProfileChanged-type-type]] pname:type must: be ename:XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED
-* [[VUID-XrEventDataInteractionProfileChanged-next-next]] pname:next must: be code:NULL
+* [[VUID-XrEventDataInteractionProfileChanged-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrEventDataInteractionProfileChanged-session-parameter]] pname:session must: be a valid slink:XrSession handle
****
--
-[open,refpage='xrSetInteractionProfileSuggestedBindings',desc='Sets the application-suggested bindings for the interaction profile',type='protos',xrefs='XrInteractionProfileSuggestedBinding']
+[open,refpage='xrSuggestInteractionProfileBindings',desc='Sets the application-suggested bindings for the interaction profile',type='protos',xrefs='XrInteractionProfileSuggestedBinding']
--
-The function flink:xrSetInteractionProfileSuggestedBindings is defined as:
+The flink:xrSuggestInteractionProfileBindings function is defined as:
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
-[[xrSetInteractionProfileSuggestedBindings,xrSetInteractionProfileSuggestedBindings]]
+[[xrSuggestInteractionProfileBindings,xrSuggestInteractionProfileBindings]]
[source,c++]
----
-XrResult xrSetInteractionProfileSuggestedBindings(
- XrSession session,
+XrResult xrSuggestInteractionProfileBindings(
+ XrInstance instance,
const XrInteractionProfileSuggestedBinding* suggestedBindings);
----
.Parameter Descriptions
****
-* pname:session is the slink:XrSession for which the application would like
- to set suggested bindings
+* pname:instance is the slink:XrInstance for which the application would
+ like to set suggested bindings
* pname:suggestedBindings is the slink:XrInteractionProfileSuggestedBinding
that the application would like to set
****
-flink:xrSetInteractionProfileSuggestedBindings sets an interaction profile
-for which the application can provide default bindings.
-The application can: call flink:xrSetInteractionProfileSuggestedBindings
-once per interaction profile that it supports.
+flink:xrSuggestInteractionProfileBindings sets an interaction profile for
+which the application can provide default bindings.
+The application can: call flink:xrSuggestInteractionProfileBindings once per
+interaction profile that it supports.
The application can: provide any number of bindings for each action.
-If the provided session is running, the runtime must: return
-ename:XR_ERROR_SESSION_RUNNING.
-If the application has already called
-flink:xrSetInteractionProfileSuggestedBindings on this session for this
-interaction profile, the runtime must: return
-ename:XR_ERROR_BINDINGS_DUPLICATED.
-See <<input-suggested-bindings, suggested bindings>> for more details.
+If the application successfully calls
+flink:xrSuggestInteractionProfileBindings more than once for an interaction
+profile, the runtime must: discard the previous suggested bindings and
+replace them with the new suggested bindings for that profile.
+
+If the interaction profile path does not follow the structure defined in
+<<semantic-path-interaction-profiles, Interaction Profiles>> or suggested
+bindings contain paths that do not follow the format defined in
+<<semantic-path-input, Device input subpaths>>, the runtime must: return
+ename:XR_ERROR_PATH_UNSUPPORTED.
+If the input source for any of the suggested bindings for the given
+interaction profile does not exist in the whitelist defined in
+<<semantic-path-interaction-profiles, Interaction Profile Paths>>, the
+runtime must: return ename:XR_ERROR_PATH_UNSUPPORTED.
+
+If the action set for any action referenced in the pname:suggestedBindings
+parameter has been included in a call to flink:xrAttachSessionActionSets,
+the implementation must: return ename:XR_ERROR_ACTIONSETS_ALREADY_ATTACHED.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
-* [[VUID-xrSetInteractionProfileSuggestedBindings-session-parameter]] pname:session must: be a valid slink:XrSession handle
-* [[VUID-xrSetInteractionProfileSuggestedBindings-suggestedBindings-parameter]] pname:suggestedBindings must: be a pointer to a valid slink:XrInteractionProfileSuggestedBinding structure
+* [[VUID-xrSuggestInteractionProfileBindings-instance-parameter]] pname:instance must: be a valid slink:XrInstance handle
+* [[VUID-xrSuggestInteractionProfileBindings-suggestedBindings-parameter]] pname:suggestedBindings must: be a pointer to a valid slink:XrInteractionProfileSuggestedBinding structure
****
.Return Codes
****
<<fundamentals-successcodes,Success>>::
* ename:XR_SUCCESS
-* ename:XR_SESSION_LOSS_PENDING
<<fundamentals-errorcodes,Failure>>::
* ename:XR_ERROR_INSTANCE_LOST
* ename:XR_ERROR_RUNTIME_FAILURE
+* ename:XR_ERROR_ACTIONSETS_ALREADY_ATTACHED
* ename:XR_ERROR_HANDLE_INVALID
* ename:XR_ERROR_VALIDATION_FAILURE
-* ename:XR_ERROR_SESSION_RUNNING
-* ename:XR_ERROR_BINDINGS_DUPLICATED
+* ename:XR_ERROR_PATH_UNSUPPORTED
* ename:XR_ERROR_PATH_INVALID
-* ename:XR_ERROR_SESSION_LOST
****
--
-[open,refpage='XrInteractionProfileSuggestedBinding',desc='Suggested bindings for a interaction profile',type='structs',xrefs='xrSetInteractionProfileSuggestedBindings XrActionSuggestedBinding']
+[open,refpage='XrInteractionProfileSuggestedBinding',desc='Suggested bindings for a interaction profile',type='structs',xrefs='xrSuggestInteractionProfileBindings XrActionSuggestedBinding']
--
The slink:XrInteractionProfileSuggestedBinding structure is defined as:
@@ -9268,7 +9667,7 @@ The slink:XrInteractionProfileSuggestedBinding structure is defined as:
----
typedef struct XrInteractionProfileSuggestedBinding {
XrStructureType type;
- const void* XR_MAY_ALIAS next;
+ const void* next;
XrPath interactionProfile;
uint32_t countSuggestedBindings;
const XrActionSuggestedBinding* suggestedBindings;
@@ -9291,15 +9690,14 @@ typedef struct XrInteractionProfileSuggestedBinding {
.Valid Usage (Implicit)
****
* [[VUID-XrInteractionProfileSuggestedBinding-type-type]] pname:type must: be ename:XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING
-* [[VUID-XrInteractionProfileSuggestedBinding-next-next]] pname:next must: be code:NULL
-* [[VUID-XrInteractionProfileSuggestedBinding-countSuggestedBindings-parameter]] pname:countSuggestedBindings must: be a valid code:uint32_t value
+* [[VUID-XrInteractionProfileSuggestedBinding-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
* [[VUID-XrInteractionProfileSuggestedBinding-suggestedBindings-parameter]] pname:suggestedBindings must: be a pointer to an array of pname:countSuggestedBindings valid slink:XrActionSuggestedBinding structures
-* [[VUID-XrInteractionProfileSuggestedBinding-countSuggestedBindings-arraylength]] pname:countSuggestedBindings must: be greater than `0`
+* [[VUID-XrInteractionProfileSuggestedBinding-countSuggestedBindings-arraylength]] The pname:countSuggestedBindings parameter must: be greater than `0`
****
--
-[open,refpage='XrActionSuggestedBinding',desc='Suggested binding for a single action',type='structs',xrefs='xrSetInteractionProfileSuggestedBindings XrInteractionProfileSuggestedBinding']
+[open,refpage='XrActionSuggestedBinding',desc='Suggested binding for a single action',type='structs',xrefs='xrSuggestInteractionProfileBindings XrInteractionProfileSuggestedBinding']
--
The slink:XrActionSuggestedBinding structure is defined as:
@@ -9331,9 +9729,107 @@ typedef struct XrActionSuggestedBinding {
--
+[open,refpage='xrAttachSessionActionSets',desc='Attaches action sets to a given session',type='protos',xrefs='']
+--
+The flink:xrAttachSessionActionSets function is defined as:
+
+// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
+[[xrAttachSessionActionSets,xrAttachSessionActionSets]]
+[source,c++]
+----
+XrResult xrAttachSessionActionSets(
+ XrSession session,
+ const XrSessionActionSetsAttachInfo* attachInfo);
+----
+
+.Parameter Descriptions
+****
+* pname:session is the slink:XrSession to attach the action sets to.
+* pname:attachInfo is the slink:XrSessionActionSetsAttachInfo to provide
+ information to attach action sets to the session.
+****
+
+flink:xrAttachSessionActionSets attaches the slink:XrActionSet handles in
+pname:attachInfo.actionSets to the pname:session.
+Action sets must: be attached in order to be synchronized with
+flink:xrSyncActions.
+
+When an action set is attached to a session, that action set becomes
+immutable.
+See flink:xrCreateAction and flink:xrSuggestInteractionProfileBindings for
+details.
+
+The runtime must: return ename:XR_ERROR_ACTIONSETS_ALREADY_ATTACHED if
+flink:xrAttachSessionActionSets is called more than once for a given
+pname:session.
+The runtime must: return ename:XR_ERROR_ACTIONSET_NOT_ATTACHED for any
+action created after flink:xrAttachSessionActionSets is called for a given
+pname:session if that handle is used with any call for the same
+pname:session.
+
+// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
+.Valid Usage (Implicit)
+****
+* [[VUID-xrAttachSessionActionSets-session-parameter]] pname:session must: be a valid slink:XrSession handle
+* [[VUID-xrAttachSessionActionSets-attachInfo-parameter]] pname:attachInfo must: be a pointer to a valid slink:XrSessionActionSetsAttachInfo structure
+****
+
+.Return Codes
+****
+<<fundamentals-successcodes,Success>>::
+* ename:XR_SUCCESS
+* ename:XR_SESSION_LOSS_PENDING
+<<fundamentals-errorcodes,Failure>>::
+* ename:XR_ERROR_INSTANCE_LOST
+* ename:XR_ERROR_SESSION_LOST
+* ename:XR_ERROR_RUNTIME_FAILURE
+* ename:XR_ERROR_HANDLE_INVALID
+* ename:XR_ERROR_VALIDATION_FAILURE
+* ename:XR_ERROR_ACTIONSETS_ALREADY_ATTACHED
+****
+
+--
+
+[open,refpage='XrSessionActionSetsAttachInfo',desc='Information to attach action sets to a session',type='structs',xrefs='xrAttachSessionActionSets']
+--
+
+The slink:XrSessionActionSetsAttachInfo structure is defined as:
+// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
+[[XrSessionActionSetsAttachInfo,XrSessionActionSetsAttachInfo]]
+[source,c++]
+----
+typedef struct XrSessionActionSetsAttachInfo {
+ XrStructureType type;
+ const void* next;
+ uint32_t countActionSets;
+ const XrActionSet* actionSets;
+} XrSessionActionSetsAttachInfo;
+----
+
+.Member Descriptions
+****
+* pname:type is the elink:XrStructureType of this structure.
+* pname:next is code:NULL or a pointer to an extension-specific structure.
+* pname:countActionSets is an integer specifying the number of valid
+ elements in the pname:actionSets array.
+* pname:actionSets is a pointer to an array of one or more slink:XrActionSet
+ handles to be attached to the session.
+****
+
+// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
+.Valid Usage (Implicit)
+****
+* [[VUID-XrSessionActionSetsAttachInfo-type-type]] pname:type must: be ename:XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO
+* [[VUID-XrSessionActionSetsAttachInfo-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrSessionActionSetsAttachInfo-actionSets-parameter]] pname:actionSets must: be a pointer to an array of pname:countActionSets valid slink:XrActionSet handles
+* [[VUID-XrSessionActionSetsAttachInfo-countActionSets-arraylength]] The pname:countActionSets parameter must: be greater than `0`
+****
+
+--
+
[open,refpage='xrGetCurrentInteractionProfile',desc='Gets the current interaction profile for a top level user paths',type='protos',xrefs='']
--
-The flink:xrGetCurrentInteractionProfile is defined as:
+The flink:xrGetCurrentInteractionProfile function is defined as:
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[xrGetCurrentInteractionProfile,xrGetCurrentInteractionProfile]]
@@ -9342,7 +9838,7 @@ The flink:xrGetCurrentInteractionProfile is defined as:
XrResult xrGetCurrentInteractionProfile(
XrSession session,
XrPath topLevelUserPath,
- XrInteractionProfileInfo* interactionProfile);
+ XrInteractionProfileState* interactionProfile);
----
.Parameter Descriptions
@@ -9351,28 +9847,35 @@ XrResult xrGetCurrentInteractionProfile(
to retrieve the current interaction profile.
* pname:topLevelUserPath is the top level user path the application would
like to retrieve the interaction profile for.
-* pname:interactionProfile is a pointer to an slink:XrInteractionProfileInfo
- structure to receive the current interaction profile information.
+* pname:interactionProfile is a pointer to an
+ slink:XrInteractionProfileState structure to receive the current
+ interaction profile.
****
flink:xrGetCurrentInteractionProfile asks the runtime for the active
interaction profiles for a top level user path.
The runtime must: return only interaction profiles for which the application
-has provided bindings with flink:xrSetInteractionProfileSuggestedBindings.
+has provided bindings with flink:xrSuggestInteractionProfileBindings.
The runtime may: return interaction profiles that do not represent
physically present hardware, for example if the runtime is using a known
interaction profile to bind to hardware that the application is not aware
of.
+The runtime may: return the last-known interaction profile in the event that
+no controllers are active.
-If the provided session is not running, the runtime must: return
-ename:XR_ERROR_SESSION_NOT_RUNNING.
+If flink:xrAttachSessionActionSets has not yet been called for the
+pname:session, the runtime must: return
+ename:XR_ERROR_ACTIONSET_NOT_ATTACHED.
+If pname:topLevelUserPath does not follow the format defined in
+<<semantic-path-input, Device input subpaths>>, the runtime must: return
+ename:XR_ERROR_PATH_UNSUPPORTED.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
* [[VUID-xrGetCurrentInteractionProfile-session-parameter]] pname:session must: be a valid slink:XrSession handle
-* [[VUID-xrGetCurrentInteractionProfile-interactionProfile-parameter]] pname:interactionProfile must: be a pointer to an slink:XrInteractionProfileInfo structure
+* [[VUID-xrGetCurrentInteractionProfile-interactionProfile-parameter]] pname:interactionProfile must: be a pointer to an slink:XrInteractionProfileState structure
****
.Return Codes
@@ -9382,29 +9885,30 @@ ename:XR_ERROR_SESSION_NOT_RUNNING.
* ename:XR_SESSION_LOSS_PENDING
<<fundamentals-errorcodes,Failure>>::
* ename:XR_ERROR_INSTANCE_LOST
+* ename:XR_ERROR_SESSION_LOST
* ename:XR_ERROR_RUNTIME_FAILURE
* ename:XR_ERROR_HANDLE_INVALID
+* ename:XR_ERROR_ACTIONSET_NOT_ATTACHED
* ename:XR_ERROR_VALIDATION_FAILURE
-* ename:XR_ERROR_SESSION_NOT_RUNNING
+* ename:XR_ERROR_PATH_UNSUPPORTED
* ename:XR_ERROR_PATH_INVALID
-* ename:XR_ERROR_SESSION_LOST
****
--
-[open,refpage='XrInteractionProfileInfo',desc='Receives active interaction profile for a top level path',type='structs',xrefs='xrSetInteractionProfileSuggestedBindings XrActionSuggestedBinding']
+[open,refpage='XrInteractionProfileState',desc='Receives active interaction profile for a top level path',type='structs',xrefs='xrSuggestInteractionProfileBindings XrActionSuggestedBinding']
--
-The slink:XrInteractionProfileInfo structure is defined as:
+The slink:XrInteractionProfileState structure is defined as:
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
-[[XrInteractionProfileInfo,XrInteractionProfileInfo]]
+[[XrInteractionProfileState,XrInteractionProfileState]]
[source,c++]
----
-typedef struct XrInteractionProfileInfo {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- XrPath interactionProfile;
-} XrInteractionProfileInfo;
+typedef struct XrInteractionProfileState {
+ XrStructureType type;
+ void* next;
+ XrPath interactionProfile;
+} XrInteractionProfileState;
----
.Member Descriptions
@@ -9412,13 +9916,13 @@ typedef struct XrInteractionProfileInfo {
* pname:type is the elink:XrStructureType of this structure.
* pname:next is code:NULL or a pointer to an extension-specific structure.
* pname:interactionProfile is the basetype:XrPath of the interaction profile
- path for the pname:topLevelUserPath used to retrieve this info, or
+ path for the pname:topLevelUserPath used to retrieve this state, or
code:XR_PATH_NULL if there is no active interaction profile at that top
level user path.
****
The runtime must: only include interaction profiles that the application has
-provided bindings for via flink:xrSetInteractionProfileSuggestedBindings or
+provided bindings for via flink:xrSuggestInteractionProfileBindings or
code:XR_PATH_NULL.
If the runtime is rebinding an interaction profile provided by the
application to a device that the application did not provide bindings for,
@@ -9430,8 +9934,8 @@ code:XR_PATH_NULL.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
-* [[VUID-XrInteractionProfileInfo-type-type]] pname:type must: be ename:XR_TYPE_INTERACTION_PROFILE_INFO
-* [[VUID-XrInteractionProfileInfo-next-next]] pname:next must: be code:NULL
+* [[VUID-XrInteractionProfileState-type-type]] pname:type must: be ename:XR_TYPE_INTERACTION_PROFILE_STATE
+* [[VUID-XrInteractionProfileState-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
@@ -9442,42 +9946,51 @@ ftext:xrGetActionState* function call that matches the elink:XrActionType
provided when the action was created.
If a mismatched call is used to retrieve the state
ename:XR_ERROR_ACTION_TYPE_MISMATCH must: be returned.
+ftext:xrGetActionState* calls for an action in an action set never bound to
+the session with flink:xrAttachSessionActionSets must: return
+ename:XR_ERROR_ACTIONSET_NOT_ATTACHED.
-The results of calls to ftext:xrGetActionState* for an slink:XrAction and
-set of subaction paths generally does not change between calls to
-flink:xrSyncActionData.
+The result of calls to ftext:xrGetActionState* for an slink:XrAction and
+subaction path must: not change between calls to flink:xrSyncActions.
When the combination of the parent slink:XrActionSet and subaction path for
-an action is passed to flink:xrSyncActionData, the runtime must: update the
+an action is passed to flink:xrSyncActions, the runtime must: update the
results from ftext:xrGetActionState* after this call with any changes to the
state of the underlying hardware.
When the parent action set and subaction path for an action is removed from
-or added to the list of active action sets passed to flink:xrSyncActionData,
+or added to the list of active action sets passed to flink:xrSyncActions,
the runtime must: update pname:isActive to reflect the new active state
after this call.
In all cases the runtime must: not change the results of
-ftext:xrGetActionState* calls between calls to flink:xrSyncActionData.
+ftext:xrGetActionState* calls between calls to flink:xrSyncActions.
-For any call to ftext:xrGetActionState* or haptics functions, if the parent
-session of the supplied slink:XrAction is not running, the runtime must:
-return ename:XR_ERROR_SESSION_NOT_RUNNING.
+When ftext:xrGetActionState* or haptic output functions are called while the
+session <<session_not_running, is not running>>, the runtime must: set the
+pname:isActive value to ename:XR_FALSE and suppress all haptic output.
When retrieving action state, pname:lastChangeTime must: be set to the
runtime's best estimate of when the physical state of the part of the device
bound to that action last changed.
-The pname:changedSinceLastSync value is calculated based on the state at the
-previous sync and the state of the current sync.
-If there is no previous sync, the pname:changedSinceLastSync value must: be
-set to false.
+The pname:currentState value is computed based on the current sync,
+combining the underlying input sources bound to the provided
+pname:subactionPaths within this action.
-The pname:isActive value must: be true whenever an action is bound and a
-source is providing state data for the current sync.
+The pname:changedSinceLastSync value must: be ename:XR_TRUE if the computed
+pname:currentState value differs from the pname:currentState value that
+would have been computed as of the previous sync for the same
+pname:subactionPaths.
+If there is no previous sync, or the action was not active for the previous
+sync, the pname:changedSinceLastSync value must: be set to ename:XR_FALSE.
+
+The pname:isActive value must: be ename:XR_TRUE whenever an action is bound
+and a source is providing state data for the current sync.
If the action is unbound or no source is present, the pname:isActive value
-must: be false.
-For any action which is inactive, the runtime must: return zero (or false)
-for state, false for pname:changedSinceLastSync, and 0 for
-pname:lastChangeTime.
+must: be ename:XR_FALSE.
+For any action which is inactive, the runtime must: return zero (or
+ename:XR_FALSE) for state, ename:XR_FALSE for pname:changedSinceLastSync,
+and code:0 for pname:lastChangeTime.
+[[multiple_inputs]]
==== Resolving a single action bound to multiple inputs or outputs
It is often the case that a single action will be bound to multiple physical
@@ -9487,10 +10000,12 @@ multiple binding as follows:
The current state value is selected based on the type of the action:
-* Boolean actions - The current state must: be the result of a boolean Or of
- all bound inputs
-* Vector1 and Vector2 actions - The current state must: be the state of the
- input with the longest length
+* Boolean actions - The current state must: be the result of a boolean
+ code:OR of all bound inputs
+* Float actions - The current state must: be the state of the input with the
+ largest absolute value
+* Vector2 actions - The current state must: be the state of the input with
+ the longest length
* Pose actions - The runtime must: select a single pose source when the
action is created or bound and use that value consistently.
The runtime should: use subaction paths specified by the application to
@@ -9498,52 +10013,135 @@ The current state value is selected based on the type of the action:
* Haptic actions - The runtime must: send output events to all bound haptic
devices
+==== Structs to describe action and subaction paths
+
+[open,refpage='XrActionStateGetInfo',desc='Information to get action state',type='structs',xrefs='xrGetActionStateBoolean xrGetActionStateFloat xrGetActionStateVector2f xrGetActionStatePose']
+--
+
+The slink:XrActionStateGetInfo structure is used to provide action and
+subaction paths when calling ftext:xrGetActionState* function.
+It is defined as:
+// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
+[[XrActionStateGetInfo,XrActionStateGetInfo]]
+[source,c++]
+----
+typedef struct XrActionStateGetInfo {
+ XrStructureType type;
+ const void* next;
+ XrAction action;
+ XrPath subactionPath;
+} XrActionStateGetInfo;
+----
+
+.Member Descriptions
+****
+* pname:type is the elink:XrStructureType of this structure.
+* pname:next is code:NULL or a pointer to an extension-specific structure.
+* pname:action is the slink:XrAction being queried.
+* pname:subactionPath is the subaction path basetype:XrPath to query data
+ from, or dlink:XR_NULL_PATH to specify all subaction paths.
+ If the subaction path is specified, it is one of the subaction paths that
+ were specified when the action was created.
+ If the subaction path was not specified when the action was created, the
+ runtime must: return ename:XR_ERROR_PATH_UNSUPPORTED.
+ If this parameter is specified, the runtime must: return data that
+ originates only from the subaction paths specified.
+****
+
+See slink:XrActionCreateInfo for a description of subaction paths, and the
+restrictions on their use.
+
+// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
+.Valid Usage (Implicit)
+****
+* [[VUID-XrActionStateGetInfo-type-type]] pname:type must: be ename:XR_TYPE_ACTION_STATE_GET_INFO
+* [[VUID-XrActionStateGetInfo-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrActionStateGetInfo-action-parameter]] pname:action must: be a valid slink:XrAction handle
+****
+
+--
+
+[open,refpage='XrHapticActionInfo',desc='Information to output haptic feedback',type='structs',xrefs='xrApplyHapticFeedback xrStopHapticFeedback']
+--
+
+The slink:XrHapticActionInfo structure is used to provide action and
+subaction paths when calling ftext:xr*HapticFeedback function.
+It is defined as:
+// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
+[[XrHapticActionInfo,XrHapticActionInfo]]
+[source,c++]
+----
+typedef struct XrHapticActionInfo {
+ XrStructureType type;
+ const void* next;
+ XrAction action;
+ XrPath subactionPath;
+} XrHapticActionInfo;
+----
+
+.Member Descriptions
+****
+* pname:type is the elink:XrStructureType of this structure.
+* pname:next is code:NULL or a pointer to an extension-specific structure.
+* pname:action is the slink:XrAction handle for the desired output haptic
+ action.
+* pname:subactionPath is the subaction path basetype:XrPath of the device to
+ send the haptic event to, or dlink:XR_NULL_PATH to specify all subaction
+ paths.
+ If the subaction path is specified, it is one of the subaction paths that
+ were specified when the action was created.
+ If the subaction path was not specified when the action was created, the
+ runtime must: return ename:XR_ERROR_PATH_UNSUPPORTED.
+ If this parameter is specified, the runtime must: trigger the haptic
+ events only on the device from the subaction path.
+****
+
+See slink:XrActionCreateInfo for a description of subaction paths, and the
+restrictions on their use.
+
+// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
+.Valid Usage (Implicit)
+****
+* [[VUID-XrHapticActionInfo-type-type]] pname:type must: be ename:XR_TYPE_HAPTIC_ACTION_INFO
+* [[VUID-XrHapticActionInfo-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrHapticActionInfo-action-parameter]] pname:action must: be a valid slink:XrAction handle
+****
+
+--
+
==== Boolean Actions
[open,refpage='xrGetActionStateBoolean',desc='Gets boolean action state',type='protos',xrefs='XrActionStateBoolean xrCreateAction']
--
-The flink:xrGetActionStateBoolean function is defined as:
+flink:xrGetActionStateBoolean retrieves the current state of a boolean
+action.
+It is defined as:
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[xrGetActionStateBoolean,xrGetActionStateBoolean]]
[source,c++]
----
XrResult xrGetActionStateBoolean(
- XrAction action,
- uint32_t countSubactionPaths,
- const XrPath* subactionPaths,
- XrActionStateBoolean* data);
+ XrSession session,
+ const XrActionStateGetInfo* getInfo,
+ XrActionStateBoolean* state);
----
.Parameter Descriptions
****
-* pname:action is the slink:XrAction being queried.
-* pname:countSubactionPaths is the number of elements in the
- pname:subactionPaths array.
- If pname:subactionPaths is code:NULL, this parameter must be 0.
-* pname:subactionPaths is an array of paths or code:NULL.
- If this array is specified, it contains one or more subaction paths that
- were specified when the action was created.
- If the array includes a subaction path that was not specified when the
- action was created the runtime must: return ename:XR_ERROR_PATH_INVALID.
- If this parameter is specified, the runtime must: return data that
- originates only on the paths specified in this array.
-* pname:data is a pointer to a valid slink:XrActionStateBoolean into which
+* pname:session is the slink:XrSession to query.
+* pname:getInfo is a pointer to slink:XrActionStateGetInfo to provide action
+ and subaction paths information.
+* pname:state is a pointer to a valid slink:XrActionStateBoolean into which
the state will be placed.
****
-flink:xrGetActionStateBoolean retrieves the current state of a boolean
-action.
-See slink:XrActionCreateInfo for a description of subaction paths, and the
-restrictions on their use.
-
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
-* [[VUID-xrGetActionStateBoolean-action-parameter]] pname:action must: be a valid slink:XrAction handle
-* [[VUID-xrGetActionStateBoolean-countSubactionPaths-parameter]] If pname:countSubactionPaths is not `0`, pname:countSubactionPaths must: be a valid code:uint32_t value
-* [[VUID-xrGetActionStateBoolean-subactionPaths-parameter]] If pname:countSubactionPaths is not `0`, pname:subactionPaths must: be a pointer to an array of pname:countSubactionPaths basetype:XrPath values
-* [[VUID-xrGetActionStateBoolean-data-parameter]] pname:data must: be a pointer to an slink:XrActionStateBoolean structure
+* [[VUID-xrGetActionStateBoolean-session-parameter]] pname:session must: be a valid slink:XrSession handle
+* [[VUID-xrGetActionStateBoolean-getInfo-parameter]] pname:getInfo must: be a pointer to a valid slink:XrActionStateGetInfo structure
+* [[VUID-xrGetActionStateBoolean-state-parameter]] pname:state must: be a pointer to an slink:XrActionStateBoolean structure
****
.Return Codes
@@ -9556,10 +10154,11 @@ restrictions on their use.
* ename:XR_ERROR_SESSION_LOST
* ename:XR_ERROR_RUNTIME_FAILURE
* ename:XR_ERROR_HANDLE_INVALID
+* ename:XR_ERROR_ACTIONSET_NOT_ATTACHED
* ename:XR_ERROR_ACTION_TYPE_MISMATCH
* ename:XR_ERROR_VALIDATION_FAILURE
-* ename:XR_ERROR_SESSION_NOT_RUNNING
* ename:XR_ERROR_PATH_INVALID
+* ename:XR_ERROR_PATH_UNSUPPORTED
****
--
@@ -9573,12 +10172,12 @@ The slink:XrActionStateBoolean structure is defined as:
[source,c++]
----
typedef struct XrActionStateBoolean {
- XrStructureType type;
- void* XR_MAY_ALIAS next;
- XrBool32 currentState;
- XrBool32 changedSinceLastSync;
- XrTime lastChangeTime;
- XrBool32 isActive;
+ XrStructureType type;
+ void* next;
+ XrBool32 currentState;
+ XrBool32 changedSinceLastSync;
+ XrTime lastChangeTime;
+ XrBool32 isActive;
} XrActionStateBoolean;
----
@@ -9589,75 +10188,64 @@ typedef struct XrActionStateBoolean {
* pname:currentState is the current state of the action.
* pname:changedSinceLastSync is ename:XR_TRUE if the value of
pname:currentState is different than it was before the most recent call to
- flink:xrSyncActionData.
+ flink:xrSyncActions.
This parameter can be combined with pname:currentState to detect rising
- and falling edges since the previous call to flink:xrSyncActionData.
- E.g. if both pname:changedSinceLastSync and pname:currentState are true
- then a rising edge (ename:XR_FALSE to ename:XR_TRUE) has taken place.
-* pname:lastChangeTime is the basetype:XrTime in nanoseconds since this
- action's value last changed.
+ and falling edges since the previous call to flink:xrSyncActions.
+ E.g. if both pname:changedSinceLastSync and pname:currentState are
+ ename:XR_TRUE then a rising edge (ename:XR_FALSE to ename:XR_TRUE) has
+ taken place.
+* pname:lastChangeTime is the basetype:XrTime when this action's value last
+ changed.
* pname:isActive is ename:XR_TRUE if and only if there exists an input
source that is contributing to the current state of this action.
****
-See slink:XrActionCreateInfo for a description of subaction paths, and the
-restrictions on their use.
+When multiple input sources are bound to this action, the pname:currentState
+follows <<multiple_inputs,the previously defined rule to resolve
+ambiguity>>.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
* [[VUID-XrActionStateBoolean-type-type]] pname:type must: be ename:XR_TYPE_ACTION_STATE_BOOLEAN
-* [[VUID-XrActionStateBoolean-next-next]] pname:next must: be code:NULL
+* [[VUID-XrActionStateBoolean-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
-==== Vector Actions
+==== Scalar and Vector Actions
-[open,refpage='xrGetActionStateVector1f',desc='Gets a floating point action state',type='protos',xrefs='XrActionStateVector1f xrCreateAction']
+[open,refpage='xrGetActionStateFloat',desc='Gets a floating point action state',type='protos',xrefs='XrActionStateFloat xrCreateAction']
--
-The flink:xrGetActionStateVector1f function is defined as:
+flink:xrGetActionStateFloat retrieves the current state of a floating-point
+action.
+It is defined as:
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
-[[xrGetActionStateVector1f,xrGetActionStateVector1f]]
+[[xrGetActionStateFloat,xrGetActionStateFloat]]
[source,c++]
----
-XrResult xrGetActionStateVector1f(
- XrAction action,
- uint32_t countSubactionPaths,
- const XrPath* subactionPaths,
- XrActionStateVector1f* data);
+XrResult xrGetActionStateFloat(
+ XrSession session,
+ const XrActionStateGetInfo* getInfo,
+ XrActionStateFloat* state);
----
.Parameter Descriptions
****
-* pname:action is the slink:XrAction being queried.
-* pname:countSubactionPaths is the number of elements in the
- pname:subactionPaths array.
- If pname:subactionPaths is NULL, this parameter must be 0.
-* pname:subactionPaths is an array of paths or code:NULL.
- If this array is specified, it contains one or more subaction paths that
- were specified when the action was created.
- If the array includes a subaction path that was not specified when the
- action was created the runtime must: return ename:XR_ERROR_PATH_INVALID.
- If this parameter is specified, the runtime must: return data that
- originates only on the paths specified in this array.
-* pname:data is a pointer to a valid slink:XrActionStateVector1f into which
+* pname:session is the slink:XrSession to query.
+* pname:getInfo is a pointer to slink:XrActionStateGetInfo to provide action
+ and subaction paths information.
+* pname:state is a pointer to a valid slink:XrActionStateFloat into which
the state will be placed.
****
-flink:xrGetActionStateVector1f retrieves the current state of a
-one-dimensional vector action.
-See slink:XrActionCreateInfo for a description of subaction paths, and the
-restrictions on their use.
-
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
-* [[VUID-xrGetActionStateVector1f-action-parameter]] pname:action must: be a valid slink:XrAction handle
-* [[VUID-xrGetActionStateVector1f-countSubactionPaths-parameter]] If pname:countSubactionPaths is not `0`, pname:countSubactionPaths must: be a valid code:uint32_t value
-* [[VUID-xrGetActionStateVector1f-subactionPaths-parameter]] If pname:countSubactionPaths is not `0`, pname:subactionPaths must: be a pointer to an array of pname:countSubactionPaths basetype:XrPath values
-* [[VUID-xrGetActionStateVector1f-data-parameter]] pname:data must: be a pointer to an slink:XrActionStateVector1f structure
+* [[VUID-xrGetActionStateFloat-session-parameter]] pname:session must: be a valid slink:XrSession handle
+* [[VUID-xrGetActionStateFloat-getInfo-parameter]] pname:getInfo must: be a pointer to a valid slink:XrActionStateGetInfo structure
+* [[VUID-xrGetActionStateFloat-state-parameter]] pname:state must: be a pointer to an slink:XrActionStateFloat structure
****
.Return Codes
@@ -9670,31 +10258,32 @@ restrictions on their use.
* ename:XR_ERROR_SESSION_LOST
* ename:XR_ERROR_RUNTIME_FAILURE
* ename:XR_ERROR_HANDLE_INVALID
+* ename:XR_ERROR_ACTIONSET_NOT_ATTACHED
* ename:XR_ERROR_ACTION_TYPE_MISMATCH
* ename:XR_ERROR_VALIDATION_FAILURE
-* ename:XR_ERROR_SESSION_NOT_RUNNING
* ename:XR_ERROR_PATH_INVALID
+* ename:XR_ERROR_PATH_UNSUPPORTED
****
--
-[open,refpage='XrActionStateVector1f',desc='Floating point action state',type='structs',xrefs='xrGetActionStateVector1f']
+[open,refpage='XrActionStateFloat',desc='Floating point action state',type='structs',xrefs='xrGetActionStateFloat']
--
-The slink:XrActionStateVector1f structure is defined as:
+The slink:XrActionStateFloat structure is defined as:
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
-[[XrActionStateVector1f,XrActionStateVector1f]]
+[[XrActionStateFloat,XrActionStateFloat]]
[source,c++]
----
-typedef struct XrActionStateVector1f {
- XrStructureType type;
- void* XR_MAY_ALIAS next;
- float currentState;
- XrBool32 changedSinceLastSync;
- XrTime lastChangeTime;
- XrBool32 isActive;
-} XrActionStateVector1f;
+typedef struct XrActionStateFloat {
+ XrStructureType type;
+ void* next;
+ float currentState;
+ XrBool32 changedSinceLastSync;
+ XrTime lastChangeTime;
+ XrBool32 isActive;
+} XrActionStateFloat;
----
.Member Descriptions
@@ -9704,67 +10293,57 @@ typedef struct XrActionStateVector1f {
* pname:currentState is the current state of the Action.
* pname:changedSinceLastSync is ename:XR_TRUE if the value of
pname:currentState is different than it was before the most recent call to
- flink:xrSyncActionData.
+ flink:xrSyncActions.
* pname:lastChangeTime is the basetype:XrTime in nanoseconds since this
action's value last changed.
* pname:isActive is ename:XR_TRUE if and only if there exists an input
source that is contributing to the current state of this action.
****
+When multiple input sources are bound to this action, the pname:currentState
+follows <<multiple_inputs,the previously defined rule to resolve
+ambiguity>>.
+
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
-* [[VUID-XrActionStateVector1f-type-type]] pname:type must: be ename:XR_TYPE_ACTION_STATE_VECTOR1F
-* [[VUID-XrActionStateVector1f-next-next]] pname:next must: be code:NULL
-* [[VUID-XrActionStateVector1f-currentState-parameter]] pname:currentState must: be a valid code:float value
+* [[VUID-XrActionStateFloat-type-type]] pname:type must: be ename:XR_TYPE_ACTION_STATE_FLOAT
+* [[VUID-XrActionStateFloat-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
-[open,refpage='xrGetActionStateVector2f',desc='Gets 2d float vector action state',type='protos',xrefs='XrActionStateVector2f xrCreateAction']
+[open,refpage='xrGetActionStateVector2f',desc='Gets 2D float vector action state',type='protos',xrefs='XrActionStateVector2f xrCreateAction']
--
-The flink:xrGetActionStateVector2f function is defined as:
-
-// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
-[[xrGetActionStateVector2f,xrGetActionStateVector2f]]
-[source,c++]
-----
-XrResult xrGetActionStateVector2f(
- XrAction action,
- uint32_t countSubactionPaths,
- const XrPath* subactionPaths,
- XrActionStateVector2f* data);
-----
-
-.Parameter Descriptions
-****
-* pname:action is the slink:XrAction being queried.
-* pname:countSubactionPaths is the number of elements in the
- pname:subactionPaths array.
- If pname:subactionPaths is NULL, this parameter must be 0.
-* pname:subactionPaths is an array of paths or code:NULL.
- If this array is specified, it contains one or more subaction paths that
- were specified when the action was created.
- If the array includes a subaction path that was not specified when the
- action was created the runtime must: return ename:XR_ERROR_PATH_INVALID.
- If this parameter is specified, the runtime must: return data that
- originates only on the paths specified in this array.
-* pname:data is a pointer to a valid slink:XrActionStateVector2f into which
- the state will be placed.
-****
-
flink:xrGetActionStateVector2f retrieves the current state of a
two-dimensional vector action.
-See slink:XrActionCreateInfo for a description of subaction paths, and the
-restrictions on their use.
+It is defined as:
+
+// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
+[[xrGetActionStateVector2f,xrGetActionStateVector2f]]
+[source,c++]
+----
+XrResult xrGetActionStateVector2f(
+ XrSession session,
+ const XrActionStateGetInfo* getInfo,
+ XrActionStateVector2f* state);
+----
+
+.Parameter Descriptions
+****
+* pname:session is the slink:XrSession to query.
+* pname:getInfo is a pointer to slink:XrActionStateGetInfo to provide action
+ and subaction paths information.
+* pname:state is a pointer to a valid slink:XrActionStateVector2f into which
+ the state will be placed.
+****
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
-* [[VUID-xrGetActionStateVector2f-action-parameter]] pname:action must: be a valid slink:XrAction handle
-* [[VUID-xrGetActionStateVector2f-countSubactionPaths-parameter]] If pname:countSubactionPaths is not `0`, pname:countSubactionPaths must: be a valid code:uint32_t value
-* [[VUID-xrGetActionStateVector2f-subactionPaths-parameter]] If pname:countSubactionPaths is not `0`, pname:subactionPaths must: be a pointer to an array of pname:countSubactionPaths basetype:XrPath values
-* [[VUID-xrGetActionStateVector2f-data-parameter]] pname:data must: be a pointer to an slink:XrActionStateVector2f structure
+* [[VUID-xrGetActionStateVector2f-session-parameter]] pname:session must: be a valid slink:XrSession handle
+* [[VUID-xrGetActionStateVector2f-getInfo-parameter]] pname:getInfo must: be a pointer to a valid slink:XrActionStateGetInfo structure
+* [[VUID-xrGetActionStateVector2f-state-parameter]] pname:state must: be a pointer to an slink:XrActionStateVector2f structure
****
.Return Codes
@@ -9777,15 +10356,16 @@ restrictions on their use.
* ename:XR_ERROR_SESSION_LOST
* ename:XR_ERROR_RUNTIME_FAILURE
* ename:XR_ERROR_HANDLE_INVALID
+* ename:XR_ERROR_ACTIONSET_NOT_ATTACHED
* ename:XR_ERROR_ACTION_TYPE_MISMATCH
* ename:XR_ERROR_VALIDATION_FAILURE
-* ename:XR_ERROR_SESSION_NOT_RUNNING
* ename:XR_ERROR_PATH_INVALID
+* ename:XR_ERROR_PATH_UNSUPPORTED
****
--
-[open,refpage='XrActionStateVector2f',desc='2d float vector action state',type='structs',xrefs='xrGetActionStateVector2f']
+[open,refpage='XrActionStateVector2f',desc='2D float vector action state',type='structs',xrefs='xrGetActionStateVector2f']
--
The slink:XrActionStateVector2f structure is defined as:
@@ -9794,12 +10374,12 @@ The slink:XrActionStateVector2f structure is defined as:
[source,c++]
----
typedef struct XrActionStateVector2f {
- XrStructureType type;
- void* XR_MAY_ALIAS next;
- XrVector2f currentState;
- XrBool32 changedSinceLastSync;
- XrTime lastChangeTime;
- XrBool32 isActive;
+ XrStructureType type;
+ void* next;
+ XrVector2f currentState;
+ XrBool32 changedSinceLastSync;
+ XrTime lastChangeTime;
+ XrBool32 isActive;
} XrActionStateVector2f;
----
@@ -9810,18 +10390,22 @@ typedef struct XrActionStateVector2f {
* pname:currentState is the current slink:XrVector2f state of the Action.
* pname:changedSinceLastSync is ename:XR_TRUE if the value of
pname:currentState is different than it was before the most recent call to
- flink:xrSyncActionData.
+ flink:xrSyncActions.
* pname:lastChangeTime is the basetype:XrTime in nanoseconds since this
action's value last changed.
* pname:isActive is ename:XR_TRUE if and only if there exists an input
source that is contributing to the current state of this action.
****
+When multiple input sources are bound to this action, the pname:currentState
+follows <<multiple_inputs,the previously defined rule to resolve
+ambiguity>>.
+
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
* [[VUID-XrActionStateVector2f-type-type]] pname:type must: be ename:XR_TYPE_ACTION_STATE_VECTOR2F
-* [[VUID-XrActionStateVector2f-next-next]] pname:next must: be code:NULL
+* [[VUID-XrActionStateVector2f-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
@@ -9838,37 +10422,33 @@ The flink:xrGetActionStatePose function is defined as:
[source,c++]
----
XrResult xrGetActionStatePose(
- XrAction action,
- XrPath subactionPath,
- XrActionStatePose* data);
+ XrSession session,
+ const XrActionStateGetInfo* getInfo,
+ XrActionStatePose* state);
----
.Parameter Descriptions
****
-* pname:action is the slink:XrAction being queried.
-* pname:subactionPath is an basetype:XrPath or code:XR_PATH_NULL.
-* pname:data is a pointer to a valid slink:XrActionStatePose into which the
+* pname:session is the slink:XrSession to query.
+* pname:getInfo is a pointer to slink:XrActionStateGetInfo to provide action
+ and subaction paths information.
+* pname:state is a pointer to a valid slink:XrActionStatePose into which the
state will be placed.
****
flink:xrGetActionStatePose returns information about the binding and active
state for the specified action.
-To determine the pose of this action at a historical or predicted time,
-create an action space using flink:xrCreateActionSpace.
-Then, after each sync, get the pose of this action space within your base
-space using flink:xrLocateSpace.
-
-See slink:XrActionCreateInfo for a description of subaction paths, and the
-restrictions on their use.
-flink:xrGetActionStatePose only accepts a single subaction path to require
-that the application choose which subaction to use for actions that are
-intended to be bound to multiple devices at the same time.
+To determine the pose of this action at a historical or predicted time, the
+application can: create an action space using flink:xrCreateActionSpace.
+Then, after each sync, the application can: locate the pose of this action
+space within a base space using flink:xrLocateSpace.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
-* [[VUID-xrGetActionStatePose-action-parameter]] pname:action must: be a valid slink:XrAction handle
-* [[VUID-xrGetActionStatePose-data-parameter]] pname:data must: be a pointer to an slink:XrActionStatePose structure
+* [[VUID-xrGetActionStatePose-session-parameter]] pname:session must: be a valid slink:XrSession handle
+* [[VUID-xrGetActionStatePose-getInfo-parameter]] pname:getInfo must: be a pointer to a valid slink:XrActionStateGetInfo structure
+* [[VUID-xrGetActionStatePose-state-parameter]] pname:state must: be a pointer to an slink:XrActionStatePose structure
****
.Return Codes
@@ -9881,10 +10461,11 @@ intended to be bound to multiple devices at the same time.
* ename:XR_ERROR_SESSION_LOST
* ename:XR_ERROR_RUNTIME_FAILURE
* ename:XR_ERROR_HANDLE_INVALID
+* ename:XR_ERROR_ACTIONSET_NOT_ATTACHED
* ename:XR_ERROR_ACTION_TYPE_MISMATCH
* ename:XR_ERROR_VALIDATION_FAILURE
-* ename:XR_ERROR_SESSION_NOT_RUNNING
* ename:XR_ERROR_PATH_INVALID
+* ename:XR_ERROR_PATH_UNSUPPORTED
****
--
@@ -9898,9 +10479,9 @@ The slink:XrActionStatePose structure is defined as:
[source,c++]
----
typedef struct XrActionStatePose {
- XrStructureType type;
- void* XR_MAY_ALIAS next;
- XrBool32 isActive;
+ XrStructureType type;
+ void* next;
+ XrBool32 isActive;
} XrActionStatePose;
----
@@ -9912,11 +10493,14 @@ typedef struct XrActionStatePose {
source that is being tracked by this pose action.
****
+A pose action must: not be bound to multiple input sources, according to
+<<multiple_inputs,the previously defined rule>>.
+
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
* [[VUID-XrActionStatePose-type-type]] pname:type must: be ename:XR_TYPE_ACTION_STATE_POSE
-* [[VUID-XrActionStatePose-next-next]] pname:next must: be code:NULL
+* [[VUID-XrActionStatePose-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
@@ -9935,7 +10519,7 @@ Haptic feedback may be immediately halted for a haptic action using the
flink:xrStopHapticFeedback function.
Output action requests activate immediately and must: not wait for the next
-call to flink:xrSyncActionData.
+call to flink:xrSyncActions.
If a haptic event is sent to an action before a previous haptic event
completes, the latest event will take precedence and the runtime must:
@@ -9944,6 +10528,10 @@ cancel all preceding incomplete haptic events on that action.
Output action requests must: be discarded and have no effect on hardware if
the application's session is not active.
+Output action requests for an action in an action set never attached to the
+session with flink:xrAttachSessionActionSets must: return
+ename:XR_ERROR_ACTIONSET_NOT_ATTACHED.
+
The only haptics type supported by unextended OpenXR is
slink:XrHapticVibration.
@@ -9956,28 +10544,18 @@ The flink:xrApplyHapticFeedback function is defined as:
[source,c++]
----
XrResult xrApplyHapticFeedback(
- XrAction hapticAction,
- uint32_t countSubactionPaths,
- const XrPath* subactionPaths,
- const XrHapticBaseHeader* hapticEvent);
+ XrSession session,
+ const XrHapticActionInfo* hapticActionInfo,
+ const XrHapticBaseHeader* hapticFeedback);
----
.Parameter Descriptions
****
-* pname:hapticAction is the slink:XrAction handle for the desired output
- action.
-* pname:countSubactionPaths is the number of elements in the
- pname:subactionPaths array.
- If pname:subactionPaths is NULL, this parameter must be 0.
-* pname:subactionPaths is an array of paths or code:NULL.
- If this array is specified, it contains one or more subaction paths that
- were specified when the action was created.
- If the array includes a subaction path that was not specified when the
- action was created the runtime must: return ename:XR_ERROR_PATH_INVALID.
- If this parameter is specified, the runtime must: trigger haptic events
- only on devices represented in the array.
-* pname:hapticEvent is a pointer to a haptic event structure which starts
-with an slink:XrHapticBaseHeader.
+* pname:session is the slink:XrSession to start outputting to.
+* pname:hapticActionInfo is a pointer to slink:XrHapticActionInfo to provide
+ action and subaction paths information.
+* pname:hapticFeedback is a pointer to a haptic event structure which starts
+ with an slink:XrHapticBaseHeader.
****
Triggers a haptic event through the specified action of type
@@ -9992,16 +10570,12 @@ If another haptic event from this session is currently happening on the
device bound to this action, the runtime must: interrupt that other event
and replace it with the new one.
-See slink:XrActionCreateInfo for a description of subaction paths, and the
-restrictions on their use.
-
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
-* [[VUID-xrApplyHapticFeedback-hapticAction-parameter]] pname:hapticAction must: be a valid slink:XrAction handle
-* [[VUID-xrApplyHapticFeedback-countSubactionPaths-parameter]] If pname:countSubactionPaths is not `0`, pname:countSubactionPaths must: be a valid code:uint32_t value
-* [[VUID-xrApplyHapticFeedback-subactionPaths-parameter]] If pname:countSubactionPaths is not `0`, pname:subactionPaths must: be a pointer to an array of pname:countSubactionPaths basetype:XrPath values
-* [[VUID-xrApplyHapticFeedback-hapticEvent-parameter]] pname:hapticEvent must: be a pointer to a valid slink:XrHapticBaseHeader structure
+* [[VUID-xrApplyHapticFeedback-session-parameter]] pname:session must: be a valid slink:XrSession handle
+* [[VUID-xrApplyHapticFeedback-hapticActionInfo-parameter]] pname:hapticActionInfo must: be a pointer to a valid slink:XrHapticActionInfo structure
+* [[VUID-xrApplyHapticFeedback-hapticFeedback-parameter]] pname:hapticFeedback must: be a pointer to a valid slink:XrHapticBaseHeader-based structure. See also: slink:XrHapticVibration
****
.Return Codes
@@ -10015,9 +10589,10 @@ restrictions on their use.
* ename:XR_ERROR_RUNTIME_FAILURE
* ename:XR_ERROR_HANDLE_INVALID
* ename:XR_ERROR_VALIDATION_FAILURE
+* ename:XR_ERROR_ACTIONSET_NOT_ATTACHED
* ename:XR_ERROR_ACTION_TYPE_MISMATCH
-* ename:XR_ERROR_SESSION_NOT_RUNNING
* ename:XR_ERROR_PATH_INVALID
+* ename:XR_ERROR_PATH_UNSUPPORTED
****
--
@@ -10031,8 +10606,8 @@ The slink:XrHapticBaseHeader structure is defined as:
[source,c++]
----
typedef struct XrHapticBaseHeader {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
+ XrStructureType type;
+ const void* next;
} XrHapticBaseHeader;
----
@@ -10047,7 +10622,7 @@ typedef struct XrHapticBaseHeader {
.Valid Usage (Implicit)
****
* [[VUID-XrHapticBaseHeader-type-type]] pname:type must: be ename:XR_TYPE_HAPTIC_VIBRATION
-* [[VUID-XrHapticBaseHeader-next-next]] pname:next must: be code:NULL
+* [[VUID-XrHapticBaseHeader-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
@@ -10061,11 +10636,11 @@ The slink:XrHapticVibration structure is defined as:
[source,c++]
----
typedef struct XrHapticVibration {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- XrDuration duration;
- float frequency;
- float amplitude;
+ XrStructureType type;
+ const void* next;
+ XrDuration duration;
+ float frequency;
+ float amplitude;
} XrHapticVibration;
----
@@ -10093,9 +10668,7 @@ implementation-dependent ranges.
.Valid Usage (Implicit)
****
* [[VUID-XrHapticVibration-type-type]] pname:type must: be ename:XR_TYPE_HAPTIC_VIBRATION
-* [[VUID-XrHapticVibration-next-next]] pname:next must: be code:NULL
-* [[VUID-XrHapticVibration-frequency-parameter]] If pname:frequency is not `0`, pname:frequency must: be a valid code:float value
-* [[VUID-XrHapticVibration-amplitude-parameter]] pname:amplitude must: be a valid code:float value
+* [[VUID-XrHapticVibration-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
@@ -10138,39 +10711,25 @@ The flink:xrStopHapticFeedback function is defined as:
[source,c++]
----
XrResult xrStopHapticFeedback(
- XrAction hapticAction,
- uint32_t countSubactionPaths,
- const XrPath* subactionPaths);
+ XrSession session,
+ const XrHapticActionInfo* hapticActionInfo);
----
.Parameter Descriptions
****
-* pname:hapticAction is the slink:XrAction handle for the desired output
- action.
-* pname:countSubactionPaths is the number of elements in the
- pname:subactionPaths array.
- If pname:subactionPaths is NULL, this parameter must be 0.
-* pname:subactionPaths is an array of paths or code:NULL.
- If this array is specified, it contains one or more subaction paths that
- were specified when the action was created.
- If the array includes a subaction path that was not specified when the
- action was created the runtime must: return ename:XR_ERROR_PATH_INVALID.
- The runtime must: only stop haptic output on the specified devices.
- If this parameter is specified, the runtime must: return data that
- originates only on the paths specified in this array.
+* pname:session is the slink:XrSession to stop outputting to.
+* pname:hapticActionInfo is a pointer to an slink:XrHapticActionInfo to
+ provide action and subaction path information.
****
If a haptic event from this slink:XrAction is in progress, when this
function is called the runtime must: stop that event.
-See slink:XrActionCreateInfo for a description of subaction paths, and the
-restrictions on their use.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
-* [[VUID-xrStopHapticFeedback-hapticAction-parameter]] pname:hapticAction must: be a valid slink:XrAction handle
-* [[VUID-xrStopHapticFeedback-countSubactionPaths-parameter]] If pname:countSubactionPaths is not `0`, pname:countSubactionPaths must: be a valid code:uint32_t value
-* [[VUID-xrStopHapticFeedback-subactionPaths-parameter]] If pname:countSubactionPaths is not `0`, pname:subactionPaths must: be a pointer to an array of pname:countSubactionPaths basetype:XrPath values
+* [[VUID-xrStopHapticFeedback-session-parameter]] pname:session must: be a valid slink:XrSession handle
+* [[VUID-xrStopHapticFeedback-hapticActionInfo-parameter]] pname:hapticActionInfo must: be a pointer to a valid slink:XrHapticActionInfo structure
****
.Return Codes
@@ -10184,75 +10743,57 @@ restrictions on their use.
* ename:XR_ERROR_RUNTIME_FAILURE
* ename:XR_ERROR_HANDLE_INVALID
* ename:XR_ERROR_VALIDATION_FAILURE
+* ename:XR_ERROR_ACTIONSET_NOT_ATTACHED
* ename:XR_ERROR_ACTION_TYPE_MISMATCH
-* ename:XR_ERROR_SESSION_NOT_RUNNING
* ename:XR_ERROR_PATH_INVALID
+* ename:XR_ERROR_PATH_UNSUPPORTED
****
--
=== Input Action State Synchronization
-[open,refpage='xrSyncActionData',desc='Updates the current state of input actions',type='protos',xrefs='XrActionSet XrActiveActionSet']
+[open,refpage='xrSyncActions',desc='Updates the current state of input actions',type='protos',xrefs='XrActionSet XrActiveActionSet']
--
-The flink:xrSyncActionData function is defined as:
+The flink:xrSyncActions function is defined as:
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
-[[xrSyncActionData,xrSyncActionData]]
+[[xrSyncActions,xrSyncActions]]
[source,c++]
----
-XrResult xrSyncActionData(
+XrResult xrSyncActions(
XrSession session,
- uint32_t countActionSets,
- const XrActiveActionSet* actionSets);
+ const XrActionsSyncInfo* syncInfo);
----
.Parameter Descriptions
****
* pname:session is a handle to the slink:XrSession that all provided action
set handles belong to.
-* pname:countActionSets is an integer specifying the number of valid
- elements in the pname:actionSets array.
-* pname:actionSets is a pointer to an array of one or more
- slink:XrActiveActionSet structures, all from pname:session, that should be
- synchronized.
+* pname:syncInfo is an slink:XrActionsSyncInfo providing information to
+ synchronize action states.
****
-flink:xrSyncActionData updates the current state of input actions.
+flink:xrSyncActions updates the current state of input actions.
Repeated input action state queries between subsequent synchronization calls
must: return the same values.
-This call must be called with an array containing the
-slink:XrActiveActionSet structures, that reference action sets which belong
-to a single, running session, that should be updated during this
-synchronization.
-Any slink:XrActionSet that has been created in this session but was not
-passed to flink:xrSyncActionData will not be updated and all action state
-queries will return that the action is inactive.
+The slink:XrActionSet structures referenced in the
+pname:syncInfo.activeActionSets must: have been previously attached to the
+session via flink:xrAttachSessionActionSets.
+If any action sets not attached to this session are passed to
+flink:xrSyncActions it must: return ename:XR_ERROR_ACTIONSET_NOT_ATTACHED.
+Subsets of the bound action sets can: be synchronized in order to control
+which actions are seen as active.
-If pname:session is not running, the runtime must: return
-ename:XR_ERROR_SESSION_NOT_RUNNING.
If pname:session is not focused, the runtime must: return
-ename:XR_SESSION_NOT_FOCUSED, and all actions in the session will be
+ename:XR_SESSION_NOT_FOCUSED, and all action states in the session must: be
inactive.
-.Parameter Descriptions
-****
-* pname:session is a handle to the slink:XrSession that all provided action
- set handles belong to.
-* pname:countActionSets is an integer specifying the number of valid
- elements in the pname:actionSets array.
-* pname:actionSets is a pointer to an array of one or more
- slink:XrActiveActionSet structures, all from pname:session, that should be
- synchronized.
-****
-
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
-* [[VUID-xrSyncActionData-session-parameter]] pname:session must: be a valid slink:XrSession handle
-* [[VUID-xrSyncActionData-countActionSets-parameter]] pname:countActionSets must: be a valid code:uint32_t value
-* [[VUID-xrSyncActionData-actionSets-parameter]] pname:actionSets must: be a pointer to an array of pname:countActionSets valid slink:XrActiveActionSet structures
-* [[VUID-xrSyncActionData-countActionSets-arraylength]] pname:countActionSets must: be greater than `0`
+* [[VUID-xrSyncActions-session-parameter]] pname:session must: be a valid slink:XrSession handle
+* [[VUID-xrSyncActions-syncInfo-parameter]] pname:syncInfo must: be a pointer to a valid slink:XrActionsSyncInfo structure
****
.Return Codes
@@ -10266,15 +10807,51 @@ inactive.
* ename:XR_ERROR_SESSION_LOST
* ename:XR_ERROR_RUNTIME_FAILURE
* ename:XR_ERROR_HANDLE_INVALID
+* ename:XR_ERROR_ACTIONSET_NOT_ATTACHED
* ename:XR_ERROR_VALIDATION_FAILURE
-* ename:XR_ERROR_SESSION_NOT_RUNNING
* ename:XR_ERROR_PATH_INVALID
+* ename:XR_ERROR_PATH_UNSUPPORTED
****
--
+[open,refpage='XrActionsSyncInfo',desc='Information to sync actions',type='structs',xrefs='xrSyncActions']
+--
+
+The slink:XrActionsSyncInfo structure is defined as:
+// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
+[[XrActionsSyncInfo,XrActionsSyncInfo]]
+[source,c++]
+----
+typedef struct XrActionsSyncInfo {
+ XrStructureType type;
+ const void* next;
+ uint32_t countActiveActionSets;
+ const XrActiveActionSet* activeActionSets;
+} XrActionsSyncInfo;
+----
+
+.Member Descriptions
+****
+* pname:type is the elink:XrStructureType of this structure.
+* pname:next is code:NULL or a pointer to an extension-specific structure.
+* pname:countActiveActionSets is an integer specifying the number of valid
+ elements in the pname:activeActionSets array.
+* pname:activeActionSets is code:NULL or a pointer to an array of one or
+ more slink:XrActiveActionSet structures that should be synchronized.
+****
+
+// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
+.Valid Usage (Implicit)
+****
+* [[VUID-XrActionsSyncInfo-type-type]] pname:type must: be ename:XR_TYPE_ACTIONS_SYNC_INFO
+* [[VUID-XrActionsSyncInfo-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrActionsSyncInfo-activeActionSets-parameter]] If pname:countActiveActionSets is not `0`, pname:activeActionSets must: be a pointer to an array of pname:countActiveActionSets valid slink:XrActiveActionSet structures
+****
+
+--
-[open,refpage='XrActiveActionSet',desc='Describes an active action set',type='structs',xrefs='xrSyncActionData']
+[open,refpage='XrActiveActionSet',desc='Describes an active action set',type='structs',xrefs='xrSyncActions']
--
The slink:XrActiveActionSet structure is defined as:
@@ -10283,37 +10860,30 @@ The slink:XrActiveActionSet structure is defined as:
[source,c++]
----
typedef struct XrActiveActionSet {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- XrActionSet actionSet;
- XrPath subactionPath;
+ XrActionSet actionSet;
+ XrPath subactionPath;
} XrActiveActionSet;
----
.Member Descriptions
****
-* pname:type is the elink:XrStructureType of this structure.
-* pname:next is code:NULL or a pointer to an extension-specific structure.
* pname:actionSet is the handle of the action set to activate.
-* pname:subactionPath is the handle of a subaction path that was declared
- when one or more actions in the action set was created or
- code:XR_PATH_NULL if the actions in this action set were not declared with
- subaction paths.
+* pname:subactionPath is a subaction path that was declared when one or more
+ actions in the action set was created or code:XR_PATH_NULL if the actions
+ in this action set were not declared with subaction paths.
If the application wants to activate the action set on more than one
subaction path, it can: include additional slink:XrActiveActionSet structs
- with the other subactionPaths.
+ with the other pname:subactionPath values.
****
This structure defines a single active action set and subaction path
combination.
-Applications provide a list of these structures via the
-flink:xrSyncActionData function.
+Applications can: provide a list of these structures to the
+flink:xrSyncActions function.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
-* [[VUID-XrActiveActionSet-type-type]] pname:type must: be ename:XR_TYPE_ACTIVE_ACTION_SET
-* [[VUID-XrActiveActionSet-next-next]] pname:next must: be code:NULL
* [[VUID-XrActiveActionSet-actionSet-parameter]] pname:actionSet must: be a valid slink:XrActionSet handle
****
@@ -10322,16 +10892,31 @@ flink:xrSyncActionData function.
=== Action Sources
-[open,refpage='xrGetBoundSourcesForAction',desc='Gets the sources for an XrAction',type='protos',xrefs='XrAction']
+An application can: use the flink:xrEnumerateBoundSourcesForAction and
+flink:xrGetInputSourceLocalizedName calls to prompt the user which physical
+inputs to use in order to perform an action.
+A *source* is the physical control that the action is bound to within the
+current interaction profile as returned by
+flink:xrGetCurrentInteractionProfile.
+An action may: be bound to multiple sources at one time, for example an
+action named actionname:hold could be bound to both the X and A buttons.
+
+Once the semantic paths for the action's source are obtained, the
+application can: gather additional information about the source.
+flink:xrGetInputSourceLocalizedName returns a localized human-readable
+string describing the source, e.g. 'A Button'.
+
+[open,refpage='xrEnumerateBoundSourcesForAction',desc='Queries the bound input sources for an action',type='protos',xrefs='XrAction']
--
-The flink:xrGetBoundSourcesForAction function is defined as:
+The flink:xrEnumerateBoundSourcesForAction function is defined as:
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
-[[xrGetBoundSourcesForAction,xrGetBoundSourcesForAction]]
+[[xrEnumerateBoundSourcesForAction,xrEnumerateBoundSourcesForAction]]
[source,c++]
----
-XrResult xrGetBoundSourcesForAction(
- XrAction action,
+XrResult xrEnumerateBoundSourcesForAction(
+ XrSession session,
+ const XrBoundSourcesForActionEnumerateInfo* enumerateInfo,
uint32_t sourceCapacityInput,
uint32_t* sourceCountOutput,
XrPath* sources);
@@ -10339,12 +10924,13 @@ XrResult xrGetBoundSourcesForAction(
.Parameter Descriptions
****
-* pname:action is the slink:XrAction being queried.
+* pname:session is the slink:XrSession being queried.
+* pname:enumerateInfo is an slink:XrBoundSourcesForActionEnumerateInfo
+ providing the query information.
* pname:sourceCapacityInput is the capacity of the array, or 0 to indicate a
request to retrieve the required capacity.
-* pname:sourceCountOutput is a pointer to the count of action sources, or a
- pointer to the required capacity in the case that
- pname:sourceCapacityInput is 0.
+* pname:sourceCountOutput is a pointer to the count of sources, or a pointer
+ to the required capacity in the case that pname:sourceCapacityInput is 0.
* pname:sources is a pointer to an application-allocated array that will be
filled with the basetype:XrPath values for all sources.
It can: be code:NULL if pname:sourceCapacityInput is 0.
@@ -10352,31 +10938,21 @@ XrResult xrGetBoundSourcesForAction(
detailed description of retrieving the required pname:sources size.
****
-An application can: use the flink:xrGetBoundSourcesForAction and
-flink:xrGetInputSourceLocalizedName calls to prompt the user which physical
-inputs to use in order to perform an action.
-A *source* is the physical control that the action is bound to.
-An action may: be bound to multiple sources at one time, for example an
-action named actionname:hold could be bound to both the X and A buttons.
+If an action is unbound, flink:xrEnumerateBoundSourcesForAction must: assign
+code:0 to the value pointed-to by pname:sourceCountOutput and not modify the
+array.
-If an action is unbound, flink:xrGetBoundSourcesForAction will assign 0 to
-the value pointed-to by pname:sourceCountOutput and not modify the array.
-
-Once the semantic paths for the action's source are obtained, the
-application can: gather additional information about the source.
-flink:xrGetInputSourceLocalizedName returns a localized human-readable
-string describing the source, e.g. 'A Button'.
-
-If the parent session of pname:action is not running, the runtime must:
-return ename:XR_ERROR_SESSION_NOT_RUNNING.
+flink:xrEnumerateBoundSourcesForAction must: return
+ename:XR_ERROR_ACTIONSET_NOT_ATTACHED if passed an action in an action set
+never attached to the session with flink:xrAttachSessionActionSets.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
-* [[VUID-xrGetBoundSourcesForAction-action-parameter]] pname:action must: be a valid slink:XrAction handle
-* [[VUID-xrGetBoundSourcesForAction-sourceCapacityInput-parameter]] If pname:sourceCapacityInput is not `0`, pname:sourceCapacityInput must: be a valid code:uint32_t value
-* [[VUID-xrGetBoundSourcesForAction-sourceCountOutput-parameter]] If pname:sourceCountOutput is not code:NULL, pname:sourceCountOutput must: be a pointer to a code:uint32_t value
-* [[VUID-xrGetBoundSourcesForAction-sources-parameter]] If pname:sourceCapacityInput is not `0`, pname:sources must: be a pointer to an array of pname:sourceCapacityInput basetype:XrPath values
+* [[VUID-xrEnumerateBoundSourcesForAction-session-parameter]] pname:session must: be a valid slink:XrSession handle
+* [[VUID-xrEnumerateBoundSourcesForAction-enumerateInfo-parameter]] pname:enumerateInfo must: be a pointer to a valid slink:XrBoundSourcesForActionEnumerateInfo structure
+* [[VUID-xrEnumerateBoundSourcesForAction-sourceCountOutput-parameter]] pname:sourceCountOutput must: be a pointer to a code:uint32_t value
+* [[VUID-xrEnumerateBoundSourcesForAction-sources-parameter]] If pname:sourceCapacityInput is not `0`, pname:sources must: be a pointer to an array of pname:sourceCapacityInput basetype:XrPath values
****
.Return Codes
@@ -10389,9 +10965,42 @@ return ename:XR_ERROR_SESSION_NOT_RUNNING.
* ename:XR_ERROR_SESSION_LOST
* ename:XR_ERROR_RUNTIME_FAILURE
* ename:XR_ERROR_HANDLE_INVALID
+* ename:XR_ERROR_ACTIONSET_NOT_ATTACHED
* ename:XR_ERROR_SIZE_INSUFFICIENT
* ename:XR_ERROR_VALIDATION_FAILURE
-* ename:XR_ERROR_SESSION_NOT_RUNNING
+* ename:XR_ERROR_PATH_INVALID
+****
+
+--
+
+[open,refpage='XrBoundSourcesForActionEnumerateInfo',desc='Information to query the bound input sources for an action',type='structs',xrefs='xrEnumerateBoundSourcesForAction']
+--
+
+The slink:XrBoundSourcesForActionEnumerateInfo structure is defined as:
+// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
+[[XrBoundSourcesForActionEnumerateInfo,XrBoundSourcesForActionEnumerateInfo]]
+[source,c++]
+----
+typedef struct XrBoundSourcesForActionEnumerateInfo {
+ XrStructureType type;
+ const void* next;
+ XrAction action;
+} XrBoundSourcesForActionEnumerateInfo;
+----
+
+.Member Descriptions
+****
+* pname:type is the elink:XrStructureType of this structure.
+* pname:next is code:NULL or a pointer to an extension-specific structure.
+* pname:action is the handle of the action to query.
+****
+
+// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
+.Valid Usage (Implicit)
+****
+* [[VUID-XrBoundSourcesForActionEnumerateInfo-type-type]] pname:type must: be ename:XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO
+* [[VUID-XrBoundSourcesForActionEnumerateInfo-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrBoundSourcesForActionEnumerateInfo-action-parameter]] pname:action must: be a valid slink:XrAction handle
****
--
@@ -10406,8 +11015,7 @@ The flink:xrGetInputSourceLocalizedName function is defined as:
----
XrResult xrGetInputSourceLocalizedName(
XrSession session,
- XrPath source,
- XrInputSourceLocalizedNameFlags whichComponents,
+ const XrInputSourceLocalizedNameGetInfo* getInfo,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
char* buffer);
@@ -10417,10 +11025,8 @@ XrResult xrGetInputSourceLocalizedName(
****
* pname:session is a handle to the slink:XrSession associated with the
action that reported this source.
-* pname:source is an basetype:XrPath representing the source.
- Typically this was returned by a call to flink:xrGetBoundSourcesForAction.
-* pname:whichComponents is any set of flags from
- elink:XrInputSourceLocalizedNameFlagBits.
+* pname:getInfo is an slink:XrInputSourceLocalizedNameGetInfo providing the
+ query information.
* pname:bufferCapacityInput is the capacity of the buffer, or 0 to indicate
a request to retrieve the required capacity.
* pname:bufferCountOutput is a pointer to the count of name characters
@@ -10435,16 +11041,13 @@ XrResult xrGetInputSourceLocalizedName(
flink:xrGetInputSourceLocalizedName returns a string for the input source in
the current system locale.
-This string is appropriate for showing to users.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
* [[VUID-xrGetInputSourceLocalizedName-session-parameter]] pname:session must: be a valid slink:XrSession handle
-* [[VUID-xrGetInputSourceLocalizedName-whichComponents-parameter]] pname:whichComponents must: be a valid combination of elink:XrInputSourceLocalizedNameFlagBits values
-* [[VUID-xrGetInputSourceLocalizedName-whichComponents-requiredbitmask]] pname:whichComponents must: not be `0`
-* [[VUID-xrGetInputSourceLocalizedName-bufferCapacityInput-parameter]] If pname:bufferCapacityInput is not `0`, pname:bufferCapacityInput must: be a valid code:uint32_t value
-* [[VUID-xrGetInputSourceLocalizedName-bufferCountOutput-parameter]] If pname:bufferCountOutput is not code:NULL, pname:bufferCountOutput must: be a pointer to a code:uint32_t value
+* [[VUID-xrGetInputSourceLocalizedName-getInfo-parameter]] pname:getInfo must: be a pointer to a valid slink:XrInputSourceLocalizedNameGetInfo structure
+* [[VUID-xrGetInputSourceLocalizedName-bufferCountOutput-parameter]] pname:bufferCountOutput must: be a pointer to a code:uint32_t value
* [[VUID-xrGetInputSourceLocalizedName-buffer-parameter]] If pname:bufferCapacityInput is not `0`, pname:buffer must: be a pointer to an array of pname:bufferCapacityInput char values
****
@@ -10458,9 +11061,48 @@ This string is appropriate for showing to users.
* ename:XR_ERROR_SESSION_LOST
* ename:XR_ERROR_RUNTIME_FAILURE
* ename:XR_ERROR_HANDLE_INVALID
-* ename:XR_ERROR_PATH_INVALID
* ename:XR_ERROR_VALIDATION_FAILURE
* ename:XR_ERROR_SIZE_INSUFFICIENT
+* ename:XR_ERROR_PATH_INVALID
+* ename:XR_ERROR_PATH_UNSUPPORTED
+****
+
+--
+
+[open,refpage='XrInputSourceLocalizedNameGetInfo',desc='Information to query the bound input sources for an action',type='structs',xrefs='xrEnumerateBoundSourcesForAction']
+--
+
+The slink:XrInputSourceLocalizedNameGetInfo structure is defined as:
+// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
+[[XrInputSourceLocalizedNameGetInfo,XrInputSourceLocalizedNameGetInfo]]
+[source,c++]
+----
+typedef struct XrInputSourceLocalizedNameGetInfo {
+ XrStructureType type;
+ const void* next;
+ XrPath sourcePath;
+ XrInputSourceLocalizedNameFlags whichComponents;
+} XrInputSourceLocalizedNameGetInfo;
+----
+
+.Member Descriptions
+****
+* pname:type is the elink:XrStructureType of this structure.
+* pname:next is code:NULL or a pointer to an extension-specific structure.
+* pname:source is an basetype:XrPath representing the source.
+ Typically this was returned by a call to
+ flink:xrEnumerateBoundSourcesForAction.
+* pname:whichComponents is any set of flags from
+ elink:XrInputSourceLocalizedNameFlagBits.
+****
+
+// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
+.Valid Usage (Implicit)
+****
+* [[VUID-XrInputSourceLocalizedNameGetInfo-type-type]] pname:type must: be ename:XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO
+* [[VUID-XrInputSourceLocalizedNameGetInfo-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrInputSourceLocalizedNameGetInfo-whichComponents-parameter]] pname:whichComponents must: be a valid combination of elink:XrInputSourceLocalizedNameFlagBits values
+* [[VUID-XrInputSourceLocalizedNameGetInfo-whichComponents-requiredbitmask]] pname:whichComponents must: not be `0`
****
--
@@ -10498,9 +11140,9 @@ static const XrInputSourceLocalizedNameFlags XR_INPUT_SOURCE_LOCALIZED_NAME_COMP
****
--
-// Extension process removed from provisional specificaion
+// Extension process removed from specification
// per discussion. See (i/863) for issue involving adding
-// it back after release.
+// it back.
// include::chapters/extensions/extension_process.adoc[]
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
@@ -10528,12 +11170,10 @@ static const XrInputSourceLocalizedNameFlags XR_INPUT_SOURCE_LOCALIZED_NAME_COMP
* <<XR_KHR_convert_timespec_time>>
-
* <<XR_KHR_D3D11_enable>>
* <<XR_KHR_D3D12_enable>>
-
* <<XR_KHR_opengl_enable>>
* <<XR_KHR_opengl_es_enable>>
@@ -10552,6 +11192,7 @@ static const XrInputSourceLocalizedNameFlags XR_INPUT_SOURCE_LOCALIZED_NAME_COMP
* <<XR_EXT_thermal_query>>
+
<<<
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
@@ -10565,17 +11206,18 @@ static const XrInputSourceLocalizedNameFlags XR_INPUT_SOURCE_LOCALIZED_NAME_COMP
*Registered Extension Number*::
9
*Revision*::
- 2
+ 3
*Extension and Version Dependencies*::
- * Requires OpenXR 0.90
+ * Requires OpenXR 1.0
*Last Modified Date*::
- 2019-01-24
+ 2019-07-17
*IP Status*::
No known IP claims.
*Contributors*::
Robert Menzel, NVIDIA +
- Martin Renschler, Qualcomm
+ Martin Renschler, Qualcomm +
+ Krzysztof Kosiński, Google
*Overview*
@@ -10609,10 +11251,10 @@ The slink:XrInstanceCreateInfoAndroidKHR structure is defined as:
[source,c++]
----
typedef struct XrInstanceCreateInfoAndroidKHR {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- void* XR_MAY_ALIAS applicationVM;
- void* XR_MAY_ALIAS applicationActivity;
+ XrStructureType type;
+ const void* next;
+ void* applicationVM;
+ void* applicationActivity;
} XrInstanceCreateInfoAndroidKHR;
----
@@ -10620,14 +11262,21 @@ typedef struct XrInstanceCreateInfoAndroidKHR {
****
* pname:type is the elink:XrStructureType of this structure.
* pname:next is code:NULL or a pointer to an extension-specific structure.
-* pname:applicationVM is a pointer to the application virtual machine.
-* pname:applicationActivity is a pointer to the application Activity.
+* pname:applicationVM is a pointer to the JNI's opaque `JavaVM` structure,
+ cast to a void pointer.
+* pname:applicationActivity is a JNI reference to an `android.app.Activity`
+ that will drive the session lifecycle of this instance, cast to a void
+ pointer.
****
slink:XrInstanceCreateInfoAndroidKHR contains additional Android specific
information needed when calling flink:xrCreateInstance.
-The slink:XrInstanceCreateInfoAndroidKHR struct must: be provided as the
-pname:next pointer in the slink:XrInstanceCreateInfo struct when calling
+The pname:applicationVM field should be populated with the `JavaVM`
+structure received by the `JNI_OnLoad` function, while the
+pname:applicationActivity field will typically contain a reference to a Java
+activity object received through an application-specific native method.
+The slink:XrInstanceCreateInfoAndroidKHR structure must: be provided in the
+pname:next chain of the slink:XrInstanceCreateInfo structure when calling
flink:xrCreateInstance.
@@ -10636,7 +11285,7 @@ flink:xrCreateInstance.
****
* [[VUID-XrInstanceCreateInfoAndroidKHR-extension-notenabled]] The `<<XR_KHR_android_create_instance>>` extension must: be enabled prior to using slink:XrInstanceCreateInfoAndroidKHR
* [[VUID-XrInstanceCreateInfoAndroidKHR-type-type]] pname:type must: be ename:XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR
-* [[VUID-XrInstanceCreateInfoAndroidKHR-next-next]] pname:next must: be code:NULL
+* [[VUID-XrInstanceCreateInfoAndroidKHR-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
* [[VUID-XrInstanceCreateInfoAndroidKHR-applicationVM-parameter]] pname:applicationVM must: be a pointer value
* [[VUID-XrInstanceCreateInfoAndroidKHR-applicationActivity-parameter]] pname:applicationActivity must: be a pointer value
****
@@ -10653,6 +11302,8 @@ flink:xrCreateInstance.
** Initial draft
* Revision 2, 2019-01-24 (Martin Renschler)
** Added error code, reformatted
+* Revision 3, 2019-07-17 (Krzysztof Kosiński)
+** Non-substantive clarifications.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
@@ -10668,18 +11319,16 @@ flink:xrCreateInstance.
*Revision*::
4
*Extension and Version Dependencies*::
- * Requires OpenXR 0.90
+ * Requires OpenXR 1.0
*Last Modified Date*::
- 2019-01-24
+ 2019-05-30
*IP Status*::
No known IP claims.
*Contributors*::
- Krzysztof Kosiński +
+ Krzysztof Kosiński, Google +
Johannes van Waveren, Oculus +
Martin Renschler, Qualcomm
-*Contacts*::
- Krzysztof Kosiński
*Overview*
@@ -10743,17 +11392,20 @@ changes at any time.
The only function that is allowed to be called on the slink:XrSwapchain
returned from this function is flink:xrDestroySwapchain.
-For example calling any of the functions flink:xrEnumerateSwapchainImages,
+For example, calling any of the functions flink:xrEnumerateSwapchainImages,
flink:xrAcquireSwapchainImage, flink:xrWaitSwapchainImage or
flink:xrReleaseSwapchainImage is invalid.
-The XR runtime must: destroy the provided Surface on calling
-flink:xrDestroySwapchain.
-Applications writing frames to the Surface thereafter leads to undefined
-behavior.
+When the application receives the slink:XrEventDataSessionStateChanged event
+with the ename:XR_SESSION_STATE_STOPPING state, it must: ensure that no
+threads are writing to any of the Android surfaces created with this
+extension before calling flink:xrEndSession.
+The effect of writing frames to the Surface when the session is in states
+other than ename:XR_SESSION_STATE_VISIBLE or ename:XR_SESSION_STATE_FOCUSED
+is undefined.
flink:xrCreateSwapchainAndroidSurfaceKHR must: return the same set of error
-codes as flink:xrCreateSwapchain under same circumstances plus
+codes as flink:xrCreateSwapchain under the same circumstances, plus
ename:XR_ERROR_FUNCTION_UNSUPPORTED in case the function is not supported.
.Valid Usage of slink:XrSwapchainCreateInfo members
@@ -10816,18 +11468,19 @@ ename:XR_ERROR_FUNCTION_UNSUPPORTED in case the function is not supported.
*Registered Extension Number*::
4
*Revision*::
- 4
+ 5
*Extension and Version Dependencies*::
- * Requires OpenXR 0.90
+ * Requires OpenXR 1.0
*Last Modified Date*::
- 2019-01-24
+ 2019-07-17
*IP Status*::
No known IP claims.
*Contributors*::
Cass Everitt, Oculus +
Johannes van Waveren, Oculus +
- Martin Renschler, Qualcomm
+ Martin Renschler, Qualcomm +
+ Krzysztof Kosiński, Google
:INCS-VAR: ../../../../generated
@@ -10908,11 +11561,12 @@ XrResult xrSetAndroidApplicationThreadKHR(
* pname:session is a valid slink:XrSession handle.
* pname:threadType is a classification of the declared thread allowing the
XR runtime to apply the relevant priority and attributes.
- If such settings fail, the error
- ename:XR_ERROR_ANDROID_THREAD_SETTINGS_FAILURE_KHR is returned.
-* pname:threadId is the thread id of the declared thread.
- If thread Id is invalid the error
- ename:XR_ERROR_ANDROID_THREAD_SETTINGS_ID_INVALID_KHR is returned.
+ If such settings fail, the runtime must: return
+ ename:XR_ERROR_ANDROID_THREAD_SETTINGS_FAILURE_KHR.
+* pname:threadId is the kernel thread ID of the declared thread, as returned
+ by `gettid()` or `android.os.process.myTid()`.
+ If the thread ID is invalid, the runtime must: return
+ ename:XR_ERROR_ANDROID_THREAD_SETTINGS_ID_INVALID_KHR.
****
flink:xrSetAndroidApplicationThreadKHR allows to declare an XR-critical
@@ -10923,8 +11577,7 @@ thread and to classify it.
****
* [[VUID-xrSetAndroidApplicationThreadKHR-extension-notenabled]] The `<<XR_KHR_android_thread_settings>>` extension must: be enabled prior to calling flink:xrSetAndroidApplicationThreadKHR
* [[VUID-xrSetAndroidApplicationThreadKHR-session-parameter]] pname:session must: be a valid slink:XrSession handle
-* [[VUID-xrSetAndroidApplicationThreadKHR-threadType-parameter]] pname:threadType must: be a valid slink:XrAndroidThreadTypeKHR value
-* [[VUID-xrSetAndroidApplicationThreadKHR-threadId-parameter]] pname:threadId must: be a valid code:uint32_t value
+* [[VUID-xrSetAndroidApplicationThreadKHR-threadType-parameter]] pname:threadType must: be a valid elink:XrAndroidThreadTypeKHR value
****
.Return Codes
@@ -10956,6 +11609,8 @@ thread and to classify it.
xrSetApplicationThreadKHR -> flink:xrSetAndroidApplicationThreadKHR.
* Revision 4, 2019-01-24 (Martin Renschler)
** Added enum specification, reformatting
+* Revision 5, 2019-07-17 (Krzysztof Kosiński)
+** Clarify the type of thread identifier used by the extension.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[XR_KHR_composition_layer_cube]]
@@ -10970,7 +11625,7 @@ thread and to classify it.
*Revision*::
8
*Extension and Version Dependencies*::
- * Requires OpenXR 0.90
+ * Requires OpenXR 1.0
*Last Modified Date*::
2019-01-24
@@ -10999,41 +11654,6 @@ Without updating the image source, the user can look all around, and the
compositor can display what they are looking at without intervention from
the application.
-The offset parameter in this layer type allows for an off-center projection
-of samples in the cubemap, which allows the distribution to be biased in a
-favored direction.
-This is useful for having a cubemap have very high quality in one direction,
-but whose quality fades as you look away from the interesting direction.
-A typical use case is video playback or high resolution forward image
-viewing.
-
-The magnitude of the offset vector determines the magnitude of the
-directional bias.
-The offset vector must: be added to the normalized direction vector before
-sampling the texture, and thus forms a modified direction vector.
-An example is shown below in which a Z offset results in greater sampling
-density in the -Z direction, but lower in the +Z direction.
-A cubemap used with this offset would typically be generated by the inverse
-of this offset mapping.
-
- -Z
-+-----------------------------+ +-----------------------------+
-| \ | | |
-| \ | | \ |
-| \ | | \ |
-| \ | | \ |
-| \ | offset { 0, 0, 0.2 } | \ |
-| + | --------------------> | + |
-| | | |
-| | | |
-| | | |
-| | | |
-| | | |
-+-----------------------------+ +-----------------------------+
- +Z
-
-
-
*New Object Types*
*New Flag Types*
@@ -11056,15 +11676,14 @@ The slink:XrCompositionLayerCubeKHR structure is defined as:
[source,c++]
----
typedef struct XrCompositionLayerCubeKHR {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- XrCompositionLayerFlags layerFlags;
- XrSpace space;
- XrEyeVisibility eyeVisibility;
- XrSwapchain swapchain;
- uint32_t imageArrayIndex;
- XrQuaternionf orientation;
- XrVector3f offset;
+ XrStructureType type;
+ const void* next;
+ XrCompositionLayerFlags layerFlags;
+ XrSpace space;
+ XrEyeVisibility eyeVisibility;
+ XrSwapchain swapchain;
+ uint32_t imageArrayIndex;
+ XrQuaternionf orientation;
} XrCompositionLayerCubeKHR;
----
@@ -11081,9 +11700,6 @@ typedef struct XrCompositionLayerCubeKHR {
or only array element.
* pname:orientation is the orientation of the environment map in the
pname:space.
-* pname:offset is an offsetting vector which must: be added to the direction
-vector.
-{0,0,0} indicates the default behavior of no offset.
****
slink:XrCompositionLayerCubeKHR contains the information needed to render a
@@ -11096,12 +11712,11 @@ slink:XrCompositionLayerBaseHeader used in slink:XrFrameEndInfo.
****
* [[VUID-XrCompositionLayerCubeKHR-extension-notenabled]] The `<<XR_KHR_composition_layer_cube>>` extension must: be enabled prior to using slink:XrCompositionLayerCubeKHR
* [[VUID-XrCompositionLayerCubeKHR-type-type]] pname:type must: be ename:XR_TYPE_COMPOSITION_LAYER_CUBE_KHR
-* [[VUID-XrCompositionLayerCubeKHR-next-next]] pname:next must: be code:NULL
-* [[VUID-XrCompositionLayerCubeKHR-layerFlags-parameter]] pname:layerFlags must: be 0 or a valid combination of elink:XrCompositionLayerFlagBits values
+* [[VUID-XrCompositionLayerCubeKHR-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrCompositionLayerCubeKHR-layerFlags-parameter]] pname:layerFlags must: be `0` or a valid combination of elink:XrCompositionLayerFlagBits values
* [[VUID-XrCompositionLayerCubeKHR-space-parameter]] pname:space must: be a valid slink:XrSpace handle
-* [[VUID-XrCompositionLayerCubeKHR-eyeVisibility-parameter]] pname:eyeVisibility must: be a valid slink:XrEyeVisibility value
+* [[VUID-XrCompositionLayerCubeKHR-eyeVisibility-parameter]] pname:eyeVisibility must: be a valid elink:XrEyeVisibility value
* [[VUID-XrCompositionLayerCubeKHR-swapchain-parameter]] pname:swapchain must: be a valid slink:XrSwapchain handle
-* [[VUID-XrCompositionLayerCubeKHR-imageArrayIndex-parameter]] pname:imageArrayIndex must: be a valid code:uint32_t value
* [[VUID-XrCompositionLayerCubeKHR-commonparent]] Both of pname:space and pname:swapchain must: have been created, allocated, or retrieved from the same slink:XrSession
****
@@ -11148,7 +11763,7 @@ slink:XrCompositionLayerBaseHeader used in slink:XrFrameEndInfo.
*Revision*::
4
*Extension and Version Dependencies*::
- * Requires OpenXR 0.90
+ * Requires OpenXR 1.0
*Last Modified Date*::
2019-01-24
@@ -11190,22 +11805,13 @@ parameters.
Typically the aspectRatio would be set to be the aspect ratio of the texture
being used, so that it looks the same within the cylinder as it does in 2D.
- -z +y
- U=0 +--+--+ U=1 +-----------------+ - V=0
- +---+ | +---+ | | |
- +--+ \ | / +--+ | | |
- +-+ \ / +-+ | | |
- ++ \ a / ++ | | |
- ++ \---/ ++ | -x +x | |
- | \ / | +--------p--------+ |
- +-------------p------r------+ +x | | |
- (+y is out of screen) | | |
- | | |
- r = Radius | | |
- a = Central Angle (0,2*Pi) | | |
- p = Pose Transform +-----------------+ - V=1
- U/V = UV Coordinates -y
+image::images/khr_composition_layer_cylinder.svg[align="center", title="Cylinder Layer Parameters"]
+
+* __r__ -- Radius
+* __a__ -- Central angle in [eq]#(0, 2{pi})#
+* __p__ -- Origin of pose transform
+* __U__/__V__ -- UV coordinates
*New Object Types*
@@ -11229,16 +11835,16 @@ The slink:XrCompositionLayerCylinderKHR structure is defined as:
[source,c++]
----
typedef struct XrCompositionLayerCylinderKHR {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- XrCompositionLayerFlags layerFlags;
- XrSpace space;
- XrEyeVisibility eyeVisibility;
- XrSwapchainSubImage subImage;
- XrPosef pose;
- float radius;
- float centralAngle;
- float aspectRatio;
+ XrStructureType type;
+ const void* next;
+ XrCompositionLayerFlags layerFlags;
+ XrSpace space;
+ XrEyeVisibility eyeVisibility;
+ XrSwapchainSubImage subImage;
+ XrPosef pose;
+ float radius;
+ float centralAngle;
+ float aspectRatio;
} XrCompositionLayerCylinderKHR;
----
@@ -11254,14 +11860,16 @@ typedef struct XrCompositionLayerCylinderKHR {
* pname:pose is an slink:XrPosef defining the position and orientation of
the center point of the view of the cylinder within the reference frame of
the pname:space.
-* pname:radius is the radius of the cylinder.
+* pname:radius is the non-negative radius of the cylinder.
+ Values of zero or floating point positive infinity are treated as an
+ infinite cylinder.
* pname:centralAngle is the angle of the visible section of the cylinder,
-based at 0 radians, in the range of [eq]#[0, 2*Pi)#.
+based at 0 radians, in the range of [eq]#[0, 2{pi})#.
It grows symmetrically around the 0 radian angle.
* pname:aspectRatio is the ratio of the visible cylinder section [eq]#width
/ height#.
-The height of the cylinder is given by: [eq]#(cylinder radius * cylinder
-angle) / aspectRatio#.
+The height of the cylinder is given by: [eq]#(cylinder radius {times}
+cylinder angle) / aspectRatio#.
****
slink:XrCompositionLayerCylinderKHR contains the information needed to
@@ -11274,14 +11882,11 @@ slink:XrCompositionLayerBaseHeader used in slink:XrFrameEndInfo.
****
* [[VUID-XrCompositionLayerCylinderKHR-extension-notenabled]] The `<<XR_KHR_composition_layer_cylinder>>` extension must: be enabled prior to using slink:XrCompositionLayerCylinderKHR
* [[VUID-XrCompositionLayerCylinderKHR-type-type]] pname:type must: be ename:XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR
-* [[VUID-XrCompositionLayerCylinderKHR-next-next]] pname:next must: be code:NULL
-* [[VUID-XrCompositionLayerCylinderKHR-layerFlags-parameter]] pname:layerFlags must: be 0 or a valid combination of elink:XrCompositionLayerFlagBits values
+* [[VUID-XrCompositionLayerCylinderKHR-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrCompositionLayerCylinderKHR-layerFlags-parameter]] pname:layerFlags must: be `0` or a valid combination of elink:XrCompositionLayerFlagBits values
* [[VUID-XrCompositionLayerCylinderKHR-space-parameter]] pname:space must: be a valid slink:XrSpace handle
-* [[VUID-XrCompositionLayerCylinderKHR-eyeVisibility-parameter]] pname:eyeVisibility must: be a valid slink:XrEyeVisibility value
+* [[VUID-XrCompositionLayerCylinderKHR-eyeVisibility-parameter]] pname:eyeVisibility must: be a valid elink:XrEyeVisibility value
* [[VUID-XrCompositionLayerCylinderKHR-subImage-parameter]] pname:subImage must: be a valid slink:XrSwapchainSubImage structure
-* [[VUID-XrCompositionLayerCylinderKHR-radius-parameter]] pname:radius must: be a valid code:float value
-* [[VUID-XrCompositionLayerCylinderKHR-centralAngle-parameter]] pname:centralAngle must: be a valid code:float value
-* [[VUID-XrCompositionLayerCylinderKHR-aspectRatio-parameter]] pname:aspectRatio must: be a valid code:float value
****
--
@@ -11317,7 +11922,7 @@ slink:XrCompositionLayerBaseHeader used in slink:XrFrameEndInfo.
*Revision*::
5
*Extension and Version Dependencies*::
- * Requires OpenXR 0.90
+ * Requires OpenXR 1.0
*Last Modified Date*::
2019-01-24
@@ -11329,9 +11934,11 @@ slink:XrCompositionLayerBaseHeader used in slink:XrFrameEndInfo.
Andreas Loeve Selvik, Arm +
Martin Renschler, Qualcomm
-*Overview* This extension defines an extra layer type which allows
-applications to submit valid depth buffers along with images submitted in
-projection layers, i.e. slink:XrCompositionLayerProjection.
+*Overview*
+
+This extension defines an extra layer type which allows applications to
+submit valid depth buffers along with images submitted in projection layers,
+i.e. slink:XrCompositionLayerProjection.
The XR runtime may: use this information to perform more accurate
reprojections taking depth into account.
@@ -11363,13 +11970,13 @@ The slink:XrCompositionLayerDepthInfoKHR structure is defined as:
[source,c++]
----
typedef struct XrCompositionLayerDepthInfoKHR {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- XrSwapchainSubImage subImage;
- float minDepth;
- float maxDepth;
- float nearZ;
- float farZ;
+ XrStructureType type;
+ const void* next;
+ XrSwapchainSubImage subImage;
+ float minDepth;
+ float maxDepth;
+ float nearZ;
+ float farZ;
} XrCompositionLayerDepthInfoKHR;
----
@@ -11384,18 +11991,18 @@ typedef struct XrCompositionLayerDepthInfoKHR {
The contained pname:imageArrayIndex is the depth image array index, with 0
meaning the first or only array element.
* pname:minDepth and pname:maxDepth are the range of depth values the
-pname:depthSwapchain could have, in the range of [eq]#[0.0,1.0]#.
-This is akin to min and max values of OpenGL's fname:glDepthRange, but with
-the requirement here that [eq]#maxDepth >= minDepth#.
-* pname:nearZ is the positive distance in meters of the minDepth value in
-the depth swapchain.
-Apps may: use a nearZ that is greater than farZ to indicate depth values are
-reversed.
-nearZ can be infinite.
-* pname:farZ is the positive distance in meters of the maxDepth value in the
-depth swapchain.
-farZ can be infinite.
-Apps must: not use the same value as nearZ.
+ pname:depthSwapchain could have, in the range of [eq]#[0.0,1.0]#.
+ This is akin to min and max values of OpenGL's fname:glDepthRange, but
+ with the requirement here that [eq]#maxDepth {geq} minDepth#.
+* pname:nearZ is the positive distance in meters of the pname:minDepth value
+ in the depth swapchain.
+ Apps may: use a pname:nearZ that is greater than pname:farZ to indicate
+ depth values are reversed.
+ pname:nearZ can be infinite.
+* pname:farZ is the positive distance in meters of the pname:maxDepth value
+ in the depth swapchain.
+ pname:farZ can be infinite.
+ Apps must: not use the same value as pname:nearZ.
****
slink:XrCompositionLayerDepthInfoKHR contains the information needed to
@@ -11409,12 +12016,8 @@ slink:XrCompositionLayerProjectionView structures in the given layer.
****
* [[VUID-XrCompositionLayerDepthInfoKHR-extension-notenabled]] The `<<XR_KHR_composition_layer_depth>>` extension must: be enabled prior to using slink:XrCompositionLayerDepthInfoKHR
* [[VUID-XrCompositionLayerDepthInfoKHR-type-type]] pname:type must: be ename:XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR
-* [[VUID-XrCompositionLayerDepthInfoKHR-next-next]] pname:next must: be code:NULL
+* [[VUID-XrCompositionLayerDepthInfoKHR-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
* [[VUID-XrCompositionLayerDepthInfoKHR-subImage-parameter]] pname:subImage must: be a valid slink:XrSwapchainSubImage structure
-* [[VUID-XrCompositionLayerDepthInfoKHR-minDepth-parameter]] pname:minDepth must: be a valid code:float value
-* [[VUID-XrCompositionLayerDepthInfoKHR-maxDepth-parameter]] pname:maxDepth must: be a valid code:float value
-* [[VUID-XrCompositionLayerDepthInfoKHR-nearZ-parameter]] pname:nearZ must: be a valid code:float value
-* [[VUID-XrCompositionLayerDepthInfoKHR-farZ-parameter]] pname:farZ must: be a valid code:float value
****
--
@@ -11452,7 +12055,7 @@ to slink:XrSwapchainSubImage
*Revision*::
3
*Extension and Version Dependencies*::
- * Requires OpenXR 0.90
+ * Requires OpenXR 1.0
*Last Modified Date*::
2019-01-24
@@ -11480,6 +12083,11 @@ This image source is appealing mostly because equirect environment maps are
very common, and the highest quality you can get from them is by sampling
them directly in the compositor.
+This is not a projection type of layer but rather an object-in-world type of
+layer, similar to slink:XrCompositionLayerQuad.
+Only the interior of the sphere surface must: be visible; the exterior of
+the sphere is not visible and must: not be drawn by the runtime.
+
*New Object Types*
*New Flag Types*
@@ -11502,16 +12110,16 @@ The slink:XrCompositionLayerEquirectKHR structure is defined as:
[source,c++]
----
typedef struct XrCompositionLayerEquirectKHR {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- XrCompositionLayerFlags layerFlags;
- XrSpace space;
- XrEyeVisibility eyeVisibility;
- XrSwapchainSubImage subImage;
- XrPosef pose;
- XrVector3f offset;
- XrVector2f scale;
- XrVector2f bias;
+ XrStructureType type;
+ const void* next;
+ XrCompositionLayerFlags layerFlags;
+ XrSpace space;
+ XrEyeVisibility eyeVisibility;
+ XrSwapchainSubImage subImage;
+ XrPosef pose;
+ float radius;
+ XrVector2f scale;
+ XrVector2f bias;
} XrCompositionLayerEquirectKHR;
----
@@ -11525,10 +12133,12 @@ typedef struct XrCompositionLayerEquirectKHR {
* pname:eye is the eye represented by this layer.
* pname:subImage identifies the image slink:XrSwapchainSubImage to use.
* pname:pose is an slink:XrPosef defining the position and orientation of
-the center point of the view of the equirect layer within the reference
-frame of the pname:space.
-* pname:offset is an slink:XrOffset2Df indicating the center of projection
- for this swapchain.
+the center point of the sphere onto which the equirect image data is mapped,
+relative to the reference frame of the pname:space.
+* pname:radius is the non-negative radius of the sphere onto which the
+ equirect image data is mapped.
+ Values of zero or floating point positive infinity are treated as an
+ infinite sphere.
* pname:scale is an slink:XrVector2f indicating a scale of the texture
coordinates after the mapping to 2D.
* pname:bias is an slink:XrVector2f indicating a bias of the texture
@@ -11546,10 +12156,10 @@ slink:XrCompositionLayerBaseHeader used in slink:XrFrameEndInfo.
****
* [[VUID-XrCompositionLayerEquirectKHR-extension-notenabled]] The `<<XR_KHR_composition_layer_equirect>>` extension must: be enabled prior to using slink:XrCompositionLayerEquirectKHR
* [[VUID-XrCompositionLayerEquirectKHR-type-type]] pname:type must: be ename:XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR
-* [[VUID-XrCompositionLayerEquirectKHR-next-next]] pname:next must: be code:NULL
-* [[VUID-XrCompositionLayerEquirectKHR-layerFlags-parameter]] pname:layerFlags must: be 0 or a valid combination of elink:XrCompositionLayerFlagBits values
+* [[VUID-XrCompositionLayerEquirectKHR-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrCompositionLayerEquirectKHR-layerFlags-parameter]] pname:layerFlags must: be `0` or a valid combination of elink:XrCompositionLayerFlagBits values
* [[VUID-XrCompositionLayerEquirectKHR-space-parameter]] pname:space must: be a valid slink:XrSpace handle
-* [[VUID-XrCompositionLayerEquirectKHR-eyeVisibility-parameter]] pname:eyeVisibility must: be a valid slink:XrEyeVisibility value
+* [[VUID-XrCompositionLayerEquirectKHR-eyeVisibility-parameter]] pname:eyeVisibility must: be a valid elink:XrEyeVisibility value
* [[VUID-XrCompositionLayerEquirectKHR-subImage-parameter]] pname:subImage must: be a valid slink:XrSwapchainSubImage structure
****
@@ -11583,7 +12193,7 @@ slink:XrCompositionLayerBaseHeader used in slink:XrFrameEndInfo.
*Revision*::
1
*Extension and Version Dependencies*::
- * Requires OpenXR 0.90
+ * Requires OpenXR 1.0
*Last Modified Date*::
2019-01-24
@@ -11641,6 +12251,9 @@ XrResult xrConvertTimespecTimeToTimeKHR(
The flink:xrConvertTimespecTimeToTimeKHR function converts a time obtained
by the code:clock_gettime function to the equivalent basetype:XrTime.
+If the output pname:time cannot represent the input pname:unixTime, the
+runtime must: return ename:XR_ERROR_TIME_INVALID.
+
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
@@ -11659,6 +12272,7 @@ by the code:clock_gettime function to the equivalent basetype:XrTime.
* ename:XR_ERROR_INSTANCE_LOST
* ename:XR_ERROR_RUNTIME_FAILURE
* ename:XR_ERROR_VALIDATION_FAILURE
+* ename:XR_ERROR_TIME_INVALID
* ename:XR_ERROR_FUNCTION_UNSUPPORTED
****
@@ -11690,6 +12304,9 @@ XrResult xrConvertTimeToTimespecTimeKHR(
The flink:xrConvertTimeToTimespecTimeKHR function converts an
basetype:XrTime to time as if generated by code:clock_gettime.
+If the output pname:unixTime cannot represent the input pname:time, the
+runtime must: return ename:XR_ERROR_TIME_INVALID.
+
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
@@ -11707,6 +12324,7 @@ basetype:XrTime to time as if generated by code:clock_gettime.
* ename:XR_ERROR_INSTANCE_LOST
* ename:XR_ERROR_RUNTIME_FAILURE
* ename:XR_ERROR_VALIDATION_FAILURE
+* ename:XR_ERROR_TIME_INVALID
* ename:XR_ERROR_FUNCTION_UNSUPPORTED
****
@@ -11720,7 +12338,6 @@ basetype:XrTime to time as if generated by code:clock_gettime.
** Initial draft
-
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[XR_KHR_D3D11_enable]]
=== XR_KHR_D3D11_enable
@@ -11732,9 +12349,9 @@ basetype:XrTime to time as if generated by code:clock_gettime.
*Registered Extension Number*::
28
*Revision*::
- 1
+ 4
*Extension and Version Dependencies*::
- * Requires OpenXR 0.90
+ * Requires OpenXR 1.0
*Last Modified Date*::
2018-11-16
@@ -11797,9 +12414,9 @@ The slink:XrGraphicsBindingD3D11KHR structure is defined as:
[source,c++]
----
typedef struct XrGraphicsBindingD3D11KHR {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- ID3D11Device* device;
+ XrStructureType type;
+ const void* next;
+ ID3D11Device* device;
} XrGraphicsBindingD3D11KHR;
----
@@ -11819,7 +12436,7 @@ slink:XrSessionCreateInfo.
****
* [[VUID-XrGraphicsBindingD3D11KHR-extension-notenabled]] The `<<XR_KHR_D3D11_enable>>` extension must: be enabled prior to using slink:XrGraphicsBindingD3D11KHR
* [[VUID-XrGraphicsBindingD3D11KHR-type-type]] pname:type must: be ename:XR_TYPE_GRAPHICS_BINDING_D3D11_KHR
-* [[VUID-XrGraphicsBindingD3D11KHR-next-next]] pname:next must: be code:NULL
+* [[VUID-XrGraphicsBindingD3D11KHR-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
* [[VUID-XrGraphicsBindingD3D11KHR-device-parameter]] pname:device must: be a pointer to an code:ID3D11Device value
****
@@ -11834,9 +12451,9 @@ The slink:XrSwapchainImageD3D11KHR structure is defined as:
[source,c++]
----
typedef struct XrSwapchainImageD3D11KHR {
- XrStructureType type;
- void* XR_MAY_ALIAS next;
- ID3D11Texture2D* texture;
+ XrStructureType type;
+ void* next;
+ ID3D11Texture2D* texture;
} XrSwapchainImageD3D11KHR;
----
@@ -11869,7 +12486,7 @@ positive Y pointing up, near Z plane at 0, and far Z plane at 1.
****
* [[VUID-XrSwapchainImageD3D11KHR-extension-notenabled]] The `<<XR_KHR_D3D11_enable>>` extension must: be enabled prior to using slink:XrSwapchainImageD3D11KHR
* [[VUID-XrSwapchainImageD3D11KHR-type-type]] pname:type must: be ename:XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR
-* [[VUID-XrSwapchainImageD3D11KHR-next-next]] pname:next must: be code:NULL
+* [[VUID-XrSwapchainImageD3D11KHR-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
* [[VUID-XrSwapchainImageD3D11KHR-texture-parameter]] pname:texture must: be a pointer to an code:ID3D11Texture2D value
****
@@ -11884,10 +12501,10 @@ The slink:XrGraphicsRequirementsD3D11KHR structure is defined as:
[source,c++]
----
typedef struct XrGraphicsRequirementsD3D11KHR {
- XrStructureType type;
- void* XR_MAY_ALIAS next;
- LUID adapterLuid;
- D3D_FEATURE_LEVEL minFeatureLevel;
+ XrStructureType type;
+ void* next;
+ LUID adapterLuid;
+ D3D_FEATURE_LEVEL minFeatureLevel;
} XrGraphicsRequirementsD3D11KHR;
----
@@ -11908,7 +12525,7 @@ flink:xrGetD3D11GraphicsRequirementsKHR.
****
* [[VUID-XrGraphicsRequirementsD3D11KHR-extension-notenabled]] The `<<XR_KHR_D3D11_enable>>` extension must: be enabled prior to using slink:XrGraphicsRequirementsD3D11KHR
* [[VUID-XrGraphicsRequirementsD3D11KHR-type-type]] pname:type must: be ename:XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR
-* [[VUID-XrGraphicsRequirementsD3D11KHR-next-next]] pname:next must: be code:NULL
+* [[VUID-XrGraphicsRequirementsD3D11KHR-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
* [[VUID-XrGraphicsRequirementsD3D11KHR-adapterLuid-parameter]] pname:adapterLuid must: be a valid code:LUID value
* [[VUID-XrGraphicsRequirementsD3D11KHR-minFeatureLevel-parameter]] pname:minFeatureLevel must: be a valid code:D3D_FEATURE_LEVEL value
****
@@ -11952,7 +12569,7 @@ XrResult xrGetD3D11GraphicsRequirementsKHR(
The flink:xrGetD3D11GraphicsRequirementsKHR function identifies to the
application what graphics device (Windows LUID) needs to be used and the
minimum feature level to use.
-flink:xrGetD3D11GraphicsRequirementsKHR has to be called prior to calling
+flink:xrGetD3D11GraphicsRequirementsKHR must: be called prior to calling
flink:xrCreateSession, and the LUID and feature level that
flink:xrGetD3D11GraphicsRequirementsKHR returns should be used to create the
sname:ID3D11Device that the application passes to flink:xrCreateSession in
@@ -12007,9 +12624,9 @@ the slink:XrGraphicsBindingD3D11KHR.
*Registered Extension Number*::
29
*Revision*::
- 1
+ 5
*Extension and Version Dependencies*::
- * Requires OpenXR 0.90
+ * Requires OpenXR 1.0
*Last Modified Date*::
2019-01-29
@@ -12099,10 +12716,10 @@ The slink:XrGraphicsBindingD3D12KHR structure is defined as:
[source,c++]
----
typedef struct XrGraphicsBindingD3D12KHR {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- ID3D12Device* device;
- ID3D12CommandQueue* queue;
+ XrStructureType type;
+ const void* next;
+ ID3D12Device* device;
+ ID3D12CommandQueue* queue;
} XrGraphicsBindingD3D12KHR;
----
@@ -12123,7 +12740,7 @@ slink:XrSessionCreateInfo.
****
* [[VUID-XrGraphicsBindingD3D12KHR-extension-notenabled]] The `<<XR_KHR_D3D12_enable>>` extension must: be enabled prior to using slink:XrGraphicsBindingD3D12KHR
* [[VUID-XrGraphicsBindingD3D12KHR-type-type]] pname:type must: be ename:XR_TYPE_GRAPHICS_BINDING_D3D12_KHR
-* [[VUID-XrGraphicsBindingD3D12KHR-next-next]] pname:next must: be code:NULL
+* [[VUID-XrGraphicsBindingD3D12KHR-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
* [[VUID-XrGraphicsBindingD3D12KHR-device-parameter]] pname:device must: be a pointer to an code:ID3D12Device value
* [[VUID-XrGraphicsBindingD3D12KHR-queue-parameter]] pname:queue must: be a pointer to an code:ID3D12CommandQueue value
****
@@ -12139,9 +12756,9 @@ The slink:XrSwapchainImageD3D12KHR structure is defined as:
[source,c++]
----
typedef struct XrSwapchainImageD3D12KHR {
- XrStructureType type;
- void* XR_MAY_ALIAS next;
- ID3D12Resource* texture;
+ XrStructureType type;
+ void* next;
+ ID3D12Resource* texture;
} XrSwapchainImageD3D12KHR;
----
@@ -12174,7 +12791,7 @@ positive Y pointing up, near Z plane at 0, and far Z plane at 1.
****
* [[VUID-XrSwapchainImageD3D12KHR-extension-notenabled]] The `<<XR_KHR_D3D12_enable>>` extension must: be enabled prior to using slink:XrSwapchainImageD3D12KHR
* [[VUID-XrSwapchainImageD3D12KHR-type-type]] pname:type must: be ename:XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR
-* [[VUID-XrSwapchainImageD3D12KHR-next-next]] pname:next must: be code:NULL
+* [[VUID-XrSwapchainImageD3D12KHR-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
* [[VUID-XrSwapchainImageD3D12KHR-texture-parameter]] pname:texture must: be a pointer to an code:ID3D12Resource value
****
@@ -12189,10 +12806,10 @@ The slink:XrGraphicsRequirementsD3D12KHR structure is defined as:
[source,c++]
----
typedef struct XrGraphicsRequirementsD3D12KHR {
- XrStructureType type;
- void* XR_MAY_ALIAS next;
- LUID adapterLuid;
- D3D_FEATURE_LEVEL minFeatureLevel;
+ XrStructureType type;
+ void* next;
+ LUID adapterLuid;
+ D3D_FEATURE_LEVEL minFeatureLevel;
} XrGraphicsRequirementsD3D12KHR;
----
@@ -12213,7 +12830,7 @@ flink:xrGetD3D12GraphicsRequirementsKHR.
****
* [[VUID-XrGraphicsRequirementsD3D12KHR-extension-notenabled]] The `<<XR_KHR_D3D12_enable>>` extension must: be enabled prior to using slink:XrGraphicsRequirementsD3D12KHR
* [[VUID-XrGraphicsRequirementsD3D12KHR-type-type]] pname:type must: be ename:XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR
-* [[VUID-XrGraphicsRequirementsD3D12KHR-next-next]] pname:next must: be code:NULL
+* [[VUID-XrGraphicsRequirementsD3D12KHR-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
* [[VUID-XrGraphicsRequirementsD3D12KHR-adapterLuid-parameter]] pname:adapterLuid must: be a valid code:LUID value
* [[VUID-XrGraphicsRequirementsD3D12KHR-minFeatureLevel-parameter]] pname:minFeatureLevel must: be a valid code:D3D_FEATURE_LEVEL value
****
@@ -12257,7 +12874,7 @@ XrResult xrGetD3D12GraphicsRequirementsKHR(
The flink:xrGetD3D12GraphicsRequirementsKHR function identifies to the
application what graphics device (Windows LUID) needs to be used and the
minimum feature level to use.
-flink:xrGetD3D12GraphicsRequirementsKHR has to be called prior to calling
+flink:xrGetD3D12GraphicsRequirementsKHR must: be called prior to calling
flink:xrCreateSession, and the LUID and feature level that
flink:xrGetD3D12GraphicsRequirementsKHR returns should be used to create the
sname:ID3D12Device that the application passes to flink:xrCreateSession in
@@ -12303,7 +12920,6 @@ the slink:XrGraphicsBindingD3D12KHR.
* Revision 5, 2019-01-29 (Dan Ginsburg)
** Added swapchain image resource state details.
-
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[XR_KHR_opengl_enable]]
=== XR_KHR_opengl_enable
@@ -12315,12 +12931,12 @@ the slink:XrGraphicsBindingD3D12KHR.
*Registered Extension Number*::
24
*Revision*::
- 1
+ 7
*Extension and Version Dependencies*::
- * Requires OpenXR 0.90
+ * Requires OpenXR 1.0
*Last Modified Date*::
- 2019-01-25
+ 2019-07-02
*IP Status*::
No known IP claims.
*Contributors*::
@@ -12334,24 +12950,26 @@ the slink:XrGraphicsBindingD3D12KHR.
This extension enables the use of the OpenGL graphics API in an OpenXR
runtime.
-Without this extension, the OpenXR runtime may not be able to use any OpenGL
-swapchain images.
+Without this extension, the OpenXR runtime may: not be able to provide any
+OpenGL swapchain images.
This extension provides the mechanisms necessary for an application to
generate a valid stext:XrGraphicsBindingOpenGL*KHR structure in order to
-create a OpenGL-based slink:XrSession.
-Note that during this process the application is responsible for creating
-all the required OpenGL objects, including an OpenGL context to be used for
-rendering.
+create an OpenGL-based slink:XrSession.
+Note that during this process the application is responsible for creating an
+OpenGL context to be used for rendering.
+The runtime however will provide the OpenGL textures to render into in the
+form of a swapchain.
-This extension also provides mechanisms for the application to interact with
+This extension provides mechanisms for the application to interact with
images acquired by calling flink:xrEnumerateSwapchainImages.
In order to expose the structures, types, and functions of this extension,
-you must: define dlink:XR_USE_GRAPHICS_API_OPENGL, as well as an appropriate
-<<window-system-header-control,window system define>> supported by this
-extension, before including the OpenXR platform header `openxr_platform.h`,
-in all portions of your library or application that include it.
+the application must: define dlink:XR_USE_GRAPHICS_API_OPENGL, as well as an
+appropriate <<window-system-header-control,window system define>> supported
+by this extension, before including the OpenXR platform header
+`openxr_platform.h`, in all portions of the library or application that
+include it.
The window system defines currently supported by this extension are:
* dlink:XR_USE_PLATFORM_WIN32
@@ -12359,6 +12977,10 @@ The window system defines currently supported by this extension are:
* dlink:XR_USE_PLATFORM_XCB
* dlink:XR_USE_PLATFORM_WAYLAND
+Note that a runtime implementation of this extension is only required to
+support the structs introduced by this extension which belong to the
+platform it is running on.
+
*New Object Types*
*New Flag Types*
@@ -12394,10 +13016,10 @@ The slink:XrGraphicsBindingOpenGLWin32KHR structure is defined as:
[source,c++]
----
typedef struct XrGraphicsBindingOpenGLWin32KHR {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- HDC hDC;
- HGLRC hGLRC;
+ XrStructureType type;
+ const void* next;
+ HDC hDC;
+ HGLRC hGLRC;
} XrGraphicsBindingOpenGLWin32KHR;
----
@@ -12413,6 +13035,12 @@ When creating an OpenGL-backed slink:XrSession on Microsoft Windows, the
application will provide a pointer to an
slink:XrGraphicsBindingOpenGLWin32KHR in the `next` chain of the
slink:XrSessionCreateInfo.
+As no standardized way exists for OpenGL to create the graphics context on a
+specific GPU, the runtime must: assume that the application uses the
+operating systems default GPU.
+If the GPU used by the runtime does not match the GPU on which the OpenGL
+context of the application got created, flink:xrCreateSession must: return
+ename:XR_ERROR_GRAPHICS_DEVICE_INVALID.
The required window system configuration define to expose this structure
type is dlink:XR_USE_PLATFORM_WIN32.
@@ -12422,7 +13050,7 @@ type is dlink:XR_USE_PLATFORM_WIN32.
****
* [[VUID-XrGraphicsBindingOpenGLWin32KHR-extension-notenabled]] The `<<XR_KHR_opengl_enable>>` extension must: be enabled prior to using slink:XrGraphicsBindingOpenGLWin32KHR
* [[VUID-XrGraphicsBindingOpenGLWin32KHR-type-type]] pname:type must: be ename:XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR
-* [[VUID-XrGraphicsBindingOpenGLWin32KHR-next-next]] pname:next must: be code:NULL
+* [[VUID-XrGraphicsBindingOpenGLWin32KHR-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
* [[VUID-XrGraphicsBindingOpenGLWin32KHR-hDC-parameter]] pname:hDC must: be a valid code:HDC value
* [[VUID-XrGraphicsBindingOpenGLWin32KHR-hGLRC-parameter]] pname:hGLRC must: be a valid code:HGLRC value
****
@@ -12438,13 +13066,13 @@ The slink:XrGraphicsBindingOpenGLXlibKHR structure is defined as:
[source,c++]
----
typedef struct XrGraphicsBindingOpenGLXlibKHR {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- Display* xDisplay;
- uint32_t visualid;
- GLXFBConfig glxFBConfig;
- GLXDrawable glxDrawable;
- GLXContext glxContext;
+ XrStructureType type;
+ const void* next;
+ Display* xDisplay;
+ uint32_t visualid;
+ GLXFBConfig glxFBConfig;
+ GLXDrawable glxDrawable;
+ GLXContext glxContext;
} XrGraphicsBindingOpenGLXlibKHR;
----
@@ -12472,9 +13100,8 @@ type is dlink:XR_USE_PLATFORM_XLIB.
****
* [[VUID-XrGraphicsBindingOpenGLXlibKHR-extension-notenabled]] The `<<XR_KHR_opengl_enable>>` extension must: be enabled prior to using slink:XrGraphicsBindingOpenGLXlibKHR
* [[VUID-XrGraphicsBindingOpenGLXlibKHR-type-type]] pname:type must: be ename:XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR
-* [[VUID-XrGraphicsBindingOpenGLXlibKHR-next-next]] pname:next must: be code:NULL
+* [[VUID-XrGraphicsBindingOpenGLXlibKHR-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
* [[VUID-XrGraphicsBindingOpenGLXlibKHR-xDisplay-parameter]] pname:xDisplay must: be a pointer to a code:Display value
-* [[VUID-XrGraphicsBindingOpenGLXlibKHR-visualid-parameter]] pname:visualid must: be a valid code:uint32_t value
* [[VUID-XrGraphicsBindingOpenGLXlibKHR-glxFBConfig-parameter]] pname:glxFBConfig must: be a valid code:GLXFBConfig value
* [[VUID-XrGraphicsBindingOpenGLXlibKHR-glxDrawable-parameter]] pname:glxDrawable must: be a valid code:GLXDrawable value
* [[VUID-XrGraphicsBindingOpenGLXlibKHR-glxContext-parameter]] pname:glxContext must: be a valid code:GLXContext value
@@ -12492,14 +13119,14 @@ The slink:XrGraphicsBindingOpenGLXcbKHR structure is defined as:
[source,c++]
----
typedef struct XrGraphicsBindingOpenGLXcbKHR {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- xcb_connection_t* connection;
- uint32_t screen_number;
- xcb_glx_fbconfig_t fbconfigid;
- xcb_visualid_t visualid;
- xcb_glx_drawable_t glxDrawable;
- xcb_glx_context_t glxContext;
+ XrStructureType type;
+ const void* next;
+ xcb_connection_t* connection;
+ uint32_t screenNumber;
+ xcb_glx_fbconfig_t fbconfigid;
+ xcb_visualid_t visualid;
+ xcb_glx_drawable_t glxDrawable;
+ xcb_glx_context_t glxContext;
} XrGraphicsBindingOpenGLXcbKHR;
----
@@ -12508,7 +13135,7 @@ typedef struct XrGraphicsBindingOpenGLXcbKHR {
* pname:type is the elink:XrStructureType of this structure.
* pname:next is code:NULL or a pointer to an extension-specific structure.
* pname:connection is a valid sname:xcb_connection_t.
-* pname:screen_number is an index indicating which screen should be used for
+* pname:screenNumber is an index indicating which screen should be used for
rendering.
* pname:fbconfigid is a valid XCB OpenGL GLX sname:xcb_glx_fbconfig_t.
* pname:visualid is a valid XCB OpenGL GLX sname:xcb_visualid_t.
@@ -12529,9 +13156,8 @@ type is dlink:XR_USE_PLATFORM_XCB.
****
* [[VUID-XrGraphicsBindingOpenGLXcbKHR-extension-notenabled]] The `<<XR_KHR_opengl_enable>>` extension must: be enabled prior to using slink:XrGraphicsBindingOpenGLXcbKHR
* [[VUID-XrGraphicsBindingOpenGLXcbKHR-type-type]] pname:type must: be ename:XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR
-* [[VUID-XrGraphicsBindingOpenGLXcbKHR-next-next]] pname:next must: be code:NULL
+* [[VUID-XrGraphicsBindingOpenGLXcbKHR-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
* [[VUID-XrGraphicsBindingOpenGLXcbKHR-connection-parameter]] pname:connection must: be a pointer to an code:xcb_connection_t value
-* [[VUID-XrGraphicsBindingOpenGLXcbKHR-screen_number-parameter]] pname:screen_number must: be a valid code:uint32_t value
* [[VUID-XrGraphicsBindingOpenGLXcbKHR-fbconfigid-parameter]] pname:fbconfigid must: be a valid code:xcb_glx_fbconfig_t value
* [[VUID-XrGraphicsBindingOpenGLXcbKHR-visualid-parameter]] pname:visualid must: be a valid code:xcb_visualid_t value
* [[VUID-XrGraphicsBindingOpenGLXcbKHR-glxDrawable-parameter]] pname:glxDrawable must: be a valid code:xcb_glx_drawable_t value
@@ -12549,9 +13175,9 @@ The slink:XrGraphicsBindingOpenGLWaylandKHR structure is defined as:
[source,c++]
----
typedef struct XrGraphicsBindingOpenGLWaylandKHR {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- struct wl_display* display;
+ XrStructureType type;
+ const void* next;
+ struct wl_display* display;
} XrGraphicsBindingOpenGLWaylandKHR;
----
@@ -12564,8 +13190,8 @@ typedef struct XrGraphicsBindingOpenGLWaylandKHR {
When creating an OpenGL-backed slink:XrSession on any Linux/Unix platform
that utilizes the Wayland protocol with its compositor, the application will
-provide a pointer to an slink:XrGraphicsBindingOpenGLWin32KHR in the `next`
-chain of the slink:XrSessionCreateInfo.
+provide a pointer to an slink:XrGraphicsBindingOpenGLWaylandKHR in the
+`next` chain of the slink:XrSessionCreateInfo.
The required window system configuration define to expose this structure
type is dlink:XR_USE_PLATFORM_WAYLAND.
@@ -12575,7 +13201,7 @@ type is dlink:XR_USE_PLATFORM_WAYLAND.
****
* [[VUID-XrGraphicsBindingOpenGLWaylandKHR-extension-notenabled]] The `<<XR_KHR_opengl_enable>>` extension must: be enabled prior to using slink:XrGraphicsBindingOpenGLWaylandKHR
* [[VUID-XrGraphicsBindingOpenGLWaylandKHR-type-type]] pname:type must: be ename:XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR
-* [[VUID-XrGraphicsBindingOpenGLWaylandKHR-next-next]] pname:next must: be code:NULL
+* [[VUID-XrGraphicsBindingOpenGLWaylandKHR-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
* [[VUID-XrGraphicsBindingOpenGLWaylandKHR-display-parameter]] pname:display must: be a pointer to a code:wl_display value
****
@@ -12590,9 +13216,9 @@ The slink:XrSwapchainImageOpenGLKHR structure is defined as:
[source,c++]
----
typedef struct XrSwapchainImageOpenGLKHR {
- XrStructureType type;
- void* XR_MAY_ALIAS next;
- uint32_t image;
+ XrStructureType type;
+ void* next;
+ uint32_t image;
} XrSwapchainImageOpenGLKHR;
----
@@ -12600,8 +13226,8 @@ typedef struct XrSwapchainImageOpenGLKHR {
****
* pname:type is the elink:XrStructureType of this structure.
* pname:next is code:NULL or a pointer to an extension-specific structure.
-* pname:image is an index indicating the current OpenGL swapchain image to
- use.
+* pname:image is the OpenGL texture handle associated with this swapchain
+ image.
****
If a given session was created with a stext:XrGraphicsBindingOpenGL*KHR, the
@@ -12626,8 +13252,7 @@ positive Y pointing up, near Z plane at -1, and far Z plane at 1.
****
* [[VUID-XrSwapchainImageOpenGLKHR-extension-notenabled]] The `<<XR_KHR_opengl_enable>>` extension must: be enabled prior to using slink:XrSwapchainImageOpenGLKHR
* [[VUID-XrSwapchainImageOpenGLKHR-type-type]] pname:type must: be ename:XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR
-* [[VUID-XrSwapchainImageOpenGLKHR-next-next]] pname:next must: be code:NULL
-* [[VUID-XrSwapchainImageOpenGLKHR-image-parameter]] pname:image must: be a valid code:uint32_t value
+* [[VUID-XrSwapchainImageOpenGLKHR-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
@@ -12641,10 +13266,10 @@ The slink:XrGraphicsRequirementsOpenGLKHR structure is defined as:
[source,c++]
----
typedef struct XrGraphicsRequirementsOpenGLKHR {
- XrStructureType type;
- void* XR_MAY_ALIAS next;
- uint32_t minApiVersionSupported;
- uint32_t maxApiVersionSupported;
+ XrStructureType type;
+ void* next;
+ XrVersion minApiVersionSupported;
+ XrVersion maxApiVersionSupported;
} XrGraphicsRequirementsOpenGLKHR;
----
@@ -12672,9 +13297,7 @@ version requirements.
****
* [[VUID-XrGraphicsRequirementsOpenGLKHR-extension-notenabled]] The `<<XR_KHR_opengl_enable>>` extension must: be enabled prior to using slink:XrGraphicsRequirementsOpenGLKHR
* [[VUID-XrGraphicsRequirementsOpenGLKHR-type-type]] pname:type must: be ename:XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR
-* [[VUID-XrGraphicsRequirementsOpenGLKHR-next-next]] pname:next must: be code:NULL
-* [[VUID-XrGraphicsRequirementsOpenGLKHR-minApiVersionSupported-parameter]] pname:minApiVersionSupported must: be a valid code:uint32_t value
-* [[VUID-XrGraphicsRequirementsOpenGLKHR-maxApiVersionSupported-parameter]] pname:maxApiVersionSupported must: be a valid code:uint32_t value
+* [[VUID-XrGraphicsRequirementsOpenGLKHR-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
@@ -12708,7 +13331,7 @@ XrResult xrGetOpenGLGraphicsRequirementsKHR(
The flink:xrGetOpenGLGraphicsRequirementsKHR function identifies to the
application the minimum OpenGL version requirement and the highest known
tested OpenGL version.
-flink:xrGetOpenGLGraphicsRequirementsKHR has to be called prior to calling
+flink:xrGetOpenGLGraphicsRequirementsKHR must: be called prior to calling
flink:xrCreateSession.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
@@ -12748,6 +13371,10 @@ flink:xrCreateSession.
** Specified Y direction and Z range in clip space
* Revision 5, 2019-01-25 (Robert Menzel)
** Description updated
+* Revision 6, 2019-07-02 (Robert Menzel)
+** Minor fixes
+* Revision 7, 2019-07-08 (Ryan Pavlk)
+** Adjusted member name in XCB struct
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[XR_KHR_opengl_es_enable]]
@@ -12760,12 +13387,12 @@ flink:xrCreateSession.
*Registered Extension Number*::
25
*Revision*::
- 1
+ 6
*Extension and Version Dependencies*::
- * Requires OpenXR 0.90
+ * Requires OpenXR 1.0
*Last Modified Date*::
- 2019-01-25
+ 2019-07-12
*IP Status*::
No known IP claims.
*Contributors*::
@@ -12773,31 +13400,37 @@ flink:xrCreateSession.
Bryce Hutchings, Microsoft +
Paul Pedriana, Oculus +
Minmin Gong, Microsoft +
- Robert Menzel, NVIDIA
+ Robert Menzel, NVIDIA +
+ Martin Renschler, Qualcomm
*Overview*
-This extension enables the use of the OpenGL ES graphics API in an OpenXR
-runtime.
-Without this extension, the OpenXR runtime may not be able to use any OpenGL
-ES swapchain images.
+This extension must be provided by runtimes supporting applications using
+OpenGL ES APIs for rendering.
+OpenGL ES applications need this extension to obtain compatible swapchain
+images which the runtime is required to supply.
+The runtime needs the following OpenGL ES objects from the application in
+order to interact properly with the OpenGL ES driver: EGLDisplay, EGLConfig
+and EGLContext.
-This extension provides the mechanisms necessary for an application to
-generate a valid stext:XrGraphicsBindingOpenGLES*KHR structure in order to
-create a OpenGL-based slink:XrSession.
-Note that during this process the application is responsible for creating
-all the required OpenGL ES objects, including an OpenGL ES context to be
-used for rendering.
+These are passed from the application to the runtime in a
+slink:XrGraphicsBindingOpenGLESAndroidKHR structure when creating the
+slink:XrSession.
+Although not restricted to Android, the OpenGL ES extension is currently
+tailored for Android.
+
+Note that the application is responsible for creating the required OpenGL ES
+objects, including an OpenGL ES context to be used for rendering.
This extension also provides mechanisms for the application to interact with
images acquired by calling flink:xrEnumerateSwapchainImages.
In order to expose the structures, types, and functions of this extension,
-you must: define dlink:XR_USE_GRAPHICS_API_OPENGL_ES, as well as an
-appropriate <<window-system-header-control,window system define>> supported
-by this extension, before including the OpenXR platform header
-`openxr_platform.h`, in all portions of your library or application that
-include it.
+the application source code must: define
+dlink:XR_USE_GRAPHICS_API_OPENGL_ES, as well as an appropriate
+<<window-system-header-control,window system define>>, before including the
+OpenXR platform header `openxr_platform.h`, in all portions of your library
+or application that include it.
The only window system define currently supported by this extension is:
* dlink:XR_USE_PLATFORM_ANDROID
@@ -12834,11 +13467,11 @@ The slink:XrGraphicsBindingOpenGLESAndroidKHR structure is defined as:
[source,c++]
----
typedef struct XrGraphicsBindingOpenGLESAndroidKHR {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- EGLDisplay display;
- EGLConfig config;
- EGLContext context;
+ XrStructureType type;
+ const void* next;
+ EGLDisplay display;
+ EGLConfig config;
+ EGLContext context;
} XrGraphicsBindingOpenGLESAndroidKHR;
----
@@ -12853,8 +13486,8 @@ typedef struct XrGraphicsBindingOpenGLESAndroidKHR {
When creating an OpenGL ES-backed slink:XrSession on Android, the
application will provide a pointer to an
-slink:XrGraphicsBindingOpenGLESAndroidKHR in the `next` chain of the
-slink:XrSessionCreateInfo.
+slink:XrGraphicsBindingOpenGLESAndroidKHR structure in the pname:next chain
+of the slink:XrSessionCreateInfo.
The required window system configuration define to expose this structure
type is dlink:XR_USE_PLATFORM_ANDROID.
@@ -12864,7 +13497,7 @@ type is dlink:XR_USE_PLATFORM_ANDROID.
****
* [[VUID-XrGraphicsBindingOpenGLESAndroidKHR-extension-notenabled]] The `<<XR_KHR_opengl_es_enable>>` extension must: be enabled prior to using slink:XrGraphicsBindingOpenGLESAndroidKHR
* [[VUID-XrGraphicsBindingOpenGLESAndroidKHR-type-type]] pname:type must: be ename:XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR
-* [[VUID-XrGraphicsBindingOpenGLESAndroidKHR-next-next]] pname:next must: be code:NULL
+* [[VUID-XrGraphicsBindingOpenGLESAndroidKHR-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
* [[VUID-XrGraphicsBindingOpenGLESAndroidKHR-display-parameter]] pname:display must: be a valid code:EGLDisplay value
* [[VUID-XrGraphicsBindingOpenGLESAndroidKHR-config-parameter]] pname:config must: be a valid code:EGLConfig value
* [[VUID-XrGraphicsBindingOpenGLESAndroidKHR-context-parameter]] pname:context must: be a valid code:EGLContext value
@@ -12881,9 +13514,9 @@ The slink:XrSwapchainImageOpenGLESKHR structure is defined as:
[source,c++]
----
typedef struct XrSwapchainImageOpenGLESKHR {
- XrStructureType type;
- void* XR_MAY_ALIAS next;
- uint32_t image;
+ XrStructureType type;
+ void* next;
+ uint32_t image;
} XrSwapchainImageOpenGLESKHR;
----
@@ -12903,7 +13536,7 @@ the following conditions must: apply.
structures.
* Whenever an OpenXR function accepts an slink:XrSwapchainImageBaseHeader
pointer as a parameter in that session, the runtime must: also accept a
- pointer to an slink:XrSwapchainImageOpenGLESKHR.
+ pointer to an slink:XrSwapchainImageOpenGLESKHR structure.
The OpenXR runtime must: interpret the bottom-left corner of the swapchain
image as the coordinate origin unless specified otherwise by extension
@@ -12917,8 +13550,7 @@ positive Y pointing up, near Z plane at -1, and far Z plane at 1.
****
* [[VUID-XrSwapchainImageOpenGLESKHR-extension-notenabled]] The `<<XR_KHR_opengl_es_enable>>` extension must: be enabled prior to using slink:XrSwapchainImageOpenGLESKHR
* [[VUID-XrSwapchainImageOpenGLESKHR-type-type]] pname:type must: be ename:XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR
-* [[VUID-XrSwapchainImageOpenGLESKHR-next-next]] pname:next must: be code:NULL
-* [[VUID-XrSwapchainImageOpenGLESKHR-image-parameter]] pname:image must: be a valid code:uint32_t value
+* [[VUID-XrSwapchainImageOpenGLESKHR-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
@@ -12932,10 +13564,10 @@ The slink:XrGraphicsRequirementsOpenGLESKHR structure is defined as:
[source,c++]
----
typedef struct XrGraphicsRequirementsOpenGLESKHR {
- XrStructureType type;
- void* XR_MAY_ALIAS next;
- uint32_t minApiVersionSupported;
- uint32_t maxApiVersionSupported;
+ XrStructureType type;
+ void* next;
+ XrVersion minApiVersionSupported;
+ XrVersion maxApiVersionSupported;
} XrGraphicsRequirementsOpenGLESKHR;
----
@@ -12963,9 +13595,7 @@ version requirements.
****
* [[VUID-XrGraphicsRequirementsOpenGLESKHR-extension-notenabled]] The `<<XR_KHR_opengl_es_enable>>` extension must: be enabled prior to using slink:XrGraphicsRequirementsOpenGLESKHR
* [[VUID-XrGraphicsRequirementsOpenGLESKHR-type-type]] pname:type must: be ename:XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR
-* [[VUID-XrGraphicsRequirementsOpenGLESKHR-next-next]] pname:next must: be code:NULL
-* [[VUID-XrGraphicsRequirementsOpenGLESKHR-minApiVersionSupported-parameter]] pname:minApiVersionSupported must: be a valid code:uint32_t value
-* [[VUID-XrGraphicsRequirementsOpenGLESKHR-maxApiVersionSupported-parameter]] pname:maxApiVersionSupported must: be a valid code:uint32_t value
+* [[VUID-XrGraphicsRequirementsOpenGLESKHR-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
@@ -13000,7 +13630,7 @@ XrResult xrGetOpenGLESGraphicsRequirementsKHR(
The flink:xrGetOpenGLESGraphicsRequirementsKHR function identifies to the
application the minimum OpenGL ES version requirement and the highest known
tested OpenGL ES version.
-flink:xrGetOpenGLESGraphicsRequirementsKHR has to be called prior to calling
+flink:xrGetOpenGLESGraphicsRequirementsKHR must: be called prior to calling
flink:xrCreateSession.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
@@ -13040,6 +13670,8 @@ flink:xrCreateSession.
** Specified Y direction and Z range in clip space
* Revision 5, 2019-01-25 (Robert Menzel)
** Description updated
+* Revision 6, 2019-07-12 (Martin Renschler)
+** Description updated
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[XR_KHR_visibility_mask]]
@@ -13052,16 +13684,17 @@ flink:xrCreateSession.
*Registered Extension Number*::
32
*Revision*::
- 1
+ 2
*Extension and Version Dependencies*::
- * Requires OpenXR 0.90
+ * Requires OpenXR 1.0
*Last Modified Date*::
2018-07-05
*IP Status*::
No known IP claims.
*Contributors*::
- Paul Pedriana, Oculus
+ Paul Pedriana, Oculus +
+ Alex Turner, Microsoft
*Contacts*::
Paul Pedriana, Oculus
@@ -13092,7 +13725,7 @@ parts.
--
elink:XrVisibilityMaskTypeKHR identifies the different types of mask
specification that is supported.
-The application may: request a view mask in any of the formats identified by
+The application can: request a view mask in any of the formats identified by
these types.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
@@ -13110,8 +13743,8 @@ typedef enum XrVisibilityMaskTypeKHR {
.Enumerant Descriptions
****
* ename:XR_VISIBILITY_MASK_TYPE_HIDDEN_TRIANGLE_MESH_KHR refers to a two
- dimensional triangle mesh on the view surface which may: not be drawn to
- by the application.
+ dimensional triangle mesh on the view surface which should: not be drawn
+ to by the application.
slink:XrVisibilityMaskKHR refers to a set of triangles identified by
vertices and vertex indices.
The index count will thus be a multiple of three.
@@ -13144,38 +13777,43 @@ typedef enum XrVisibilityMaskTypeKHR {
[open,refpage='XrVisibilityMaskKHR',desc='Visibility Mask',type='structs']
--
-The slink:XrVisibilityMaskKHR struct is an input/output struct which
+The slink:XrVisibilityMaskKHR structure is an input/output struct which
specifies the view mask.
-Upon input to flink:xrGetVisibilityMaskKHR, pname:vertexCount and
-pname:indexCount refer to the capacity of the vertices and indices members,
-respectively.
-Upon return from flink:xrGetVisibilityMaskKHR, pname:vertexCount and
-pname:indexCount refer to the required capacity of the vertices and indices
-parameters respectively.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[XrVisibilityMaskKHR,XrVisibilityMaskKHR]]
[source,c++]
----
typedef struct XrVisibilityMaskKHR {
- XrStructureType type;
- void* XR_MAY_ALIAS next;
- uint32_t vertexCount;
- XrVector2f* vertices;
- uint32_t indexCount;
- uint32_t* indices;
+ XrStructureType type;
+ void* next;
+ uint32_t vertexCapacityInput;
+ uint32_t vertexCountOutput;
+ XrVector2f* vertices;
+ uint32_t indexCapacityInput;
+ uint32_t indexCountOutput;
+ uint32_t* indices;
} XrVisibilityMaskKHR;
----
.Member Descriptions
****
-* pname:type is the type of this struct
+* pname:type is the elink:XrStructureType of this structure.
* pname:next is code:NULL or a pointer to an extension-specific structure.
-* pname:vertexCount is the count of pname:vertices.
-* pname:vertices is an array of vertices that specify coordinates in texture
- UV space.
-* pname:indexCount is the count of pname:indices.
-* pname:indices is an array of indices into the pname:vertices array.
+* pname:vertexCapacityInput is the capacity of the pname:vertices array, or
+ `0` to indicate a request to retrieve the required capacity.
+* pname:vertexCountOutput is filled in by the runtime with the count of
+ vertices written or the required capacity in the case that
+ pname:vertexCapacityInput or pname:indexCapacityInput is `0`.
+* pname:vertices is an array of vertices filled in by the runtime that
+ specifies mask coordinates in the z=-1 plane of the view.
+* pname:indexCapacityInput is the capacity of the pname:indices array, or
+ `0` to indicate a request to retrieve the required capacity.
+* pname:indexCountOutput is filled in by the runtime with the count of
+ indices written or the required capacity in the case that
+ pname:vertexCapacityInput or pname:indexCapacityInput is `0`.
+* pname:indices is an array of indices filled in by the runtime, specifying
+ the indices of the mask geometry in the pname:vertices array.
****
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
@@ -13183,18 +13821,16 @@ typedef struct XrVisibilityMaskKHR {
****
* [[VUID-XrVisibilityMaskKHR-extension-notenabled]] The `<<XR_KHR_visibility_mask>>` extension must: be enabled prior to using slink:XrVisibilityMaskKHR
* [[VUID-XrVisibilityMaskKHR-type-type]] pname:type must: be ename:XR_TYPE_VISIBILITY_MASK_KHR
-* [[VUID-XrVisibilityMaskKHR-next-next]] pname:next must: be code:NULL
-* [[VUID-XrVisibilityMaskKHR-vertexCount-parameter]] pname:vertexCount must: be a valid code:uint32_t value
-* [[VUID-XrVisibilityMaskKHR-vertices-parameter]] pname:vertices must: be a pointer to an slink:XrVector2f structure
-* [[VUID-XrVisibilityMaskKHR-indexCount-parameter]] pname:indexCount must: be a valid code:uint32_t value
-* [[VUID-XrVisibilityMaskKHR-indices-parameter]] pname:indices must: be a pointer to a code:uint32_t value
+* [[VUID-XrVisibilityMaskKHR-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrVisibilityMaskKHR-vertices-parameter]] If pname:vertexCapacityInput is not `0`, pname:vertices must: be a pointer to an array of pname:vertexCapacityInput slink:XrVector2f structures
+* [[VUID-XrVisibilityMaskKHR-indices-parameter]] If pname:indexCapacityInput is not `0`, pname:indices must: be a pointer to an array of pname:indexCapacityInput code:uint32_t values
****
--
[open,refpage='XrEventDataVisibilityMaskChangedKHR',desc='Visibility Mask',type='structs']
--
-The slink:XrEventDataVisibilityMaskChangedKHR struct specifies an event
+The slink:XrEventDataVisibilityMaskChangedKHR structure specifies an event
which indicates that a given view mask has changed.
The application should: respond to the event by calling
flink:xrGetVisibilityMaskKHR to retrieve the updated mask.
@@ -13207,17 +13843,19 @@ the application, one per view.
[source,c++]
----
typedef struct XrEventDataVisibilityMaskChangedKHR {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- XrViewConfigurationType viewConfigurationType;
- uint32_t viewIndex;
+ XrStructureType type;
+ const void* next;
+ XrSession session;
+ XrViewConfigurationType viewConfigurationType;
+ uint32_t viewIndex;
} XrEventDataVisibilityMaskChangedKHR;
----
.Member Descriptions
****
-* pname:type is the type of this struct
+* pname:type is the elink:XrStructureType of this structure.
* pname:next is code:NULL or a pointer to an extension-specific structure.
+* pname:session is the slink:XrSession for which the view mask has changed.
* pname:viewConfigurationType is the view configuration whose mask has
changed.
* pname:viewIndex is the individual view within the view configuration to
@@ -13229,9 +13867,9 @@ typedef struct XrEventDataVisibilityMaskChangedKHR {
****
* [[VUID-XrEventDataVisibilityMaskChangedKHR-extension-notenabled]] The `<<XR_KHR_visibility_mask>>` extension must: be enabled prior to using slink:XrEventDataVisibilityMaskChangedKHR
* [[VUID-XrEventDataVisibilityMaskChangedKHR-type-type]] pname:type must: be ename:XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR
-* [[VUID-XrEventDataVisibilityMaskChangedKHR-next-next]] pname:next must: be code:NULL
-* [[VUID-XrEventDataVisibilityMaskChangedKHR-viewConfigurationType-parameter]] pname:viewConfigurationType must: be a valid slink:XrViewConfigurationType value
-* [[VUID-XrEventDataVisibilityMaskChangedKHR-viewIndex-parameter]] pname:viewIndex must: be a valid code:uint32_t value
+* [[VUID-XrEventDataVisibilityMaskChangedKHR-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrEventDataVisibilityMaskChangedKHR-session-parameter]] pname:session must: be a valid slink:XrSession handle
+* [[VUID-XrEventDataVisibilityMaskChangedKHR-viewConfigurationType-parameter]] pname:viewConfigurationType must: be a valid elink:XrViewConfigurationType value
****
--
@@ -13240,7 +13878,7 @@ typedef struct XrEventDataVisibilityMaskChangedKHR {
[open,refpage='xrGetVisibilityMaskKHR',desc='Gets visibility mask',type='protos']
--
-The function flink:xrGetVisibilityMaskKHR is defined as:
+The flink:xrGetVisibilityMaskKHR function is defined as:
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[xrGetVisibilityMaskKHR,xrGetVisibilityMaskKHR]]
@@ -13268,21 +13906,22 @@ XrResult xrGetVisibilityMaskKHR(
****
flink:xrGetVisibilityMaskKHR retrieves the view mask for a given view.
+This function follows the <<buffer-size-parameters,two-call idiom>> for
+filling multiple buffers in a struct.
+Specifically, if either pname:vertexCapacityInput or
+pname:indexCapacityInput is `0`, the runtime must: respond as if both fields
+were set to `0`, returning the vertex count and index count through
+pname:vertexCountOutput or pname:indexCountOutput respectively.
If a view mask for the specified view isn't available, the returned vertex
-and index counts will be zero.
-If the input vertex or index count are less than required,
-ename:XR_ERROR_SIZE_INSUFFICIENT is returned, the vertex and index count
-will be updated to reflect the required count, and the vertex and index
-array contents are undefined.
+and index counts must: be `0`.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
* [[VUID-xrGetVisibilityMaskKHR-extension-notenabled]] The `<<XR_KHR_visibility_mask>>` extension must: be enabled prior to calling flink:xrGetVisibilityMaskKHR
* [[VUID-xrGetVisibilityMaskKHR-session-parameter]] pname:session must: be a valid slink:XrSession handle
-* [[VUID-xrGetVisibilityMaskKHR-viewConfigurationType-parameter]] pname:viewConfigurationType must: be a valid slink:XrViewConfigurationType value
-* [[VUID-xrGetVisibilityMaskKHR-viewIndex-parameter]] pname:viewIndex must: be a valid code:uint32_t value
-* [[VUID-xrGetVisibilityMaskKHR-visibilityMaskType-parameter]] pname:visibilityMaskType must: be a valid slink:XrVisibilityMaskTypeKHR value
+* [[VUID-xrGetVisibilityMaskKHR-viewConfigurationType-parameter]] pname:viewConfigurationType must: be a valid elink:XrViewConfigurationType value
+* [[VUID-xrGetVisibilityMaskKHR-visibilityMaskType-parameter]] pname:visibilityMaskType must: be a valid elink:XrVisibilityMaskTypeKHR value
* [[VUID-xrGetVisibilityMaskKHR-visibilityMask-parameter]] pname:visibilityMask must: be a pointer to an slink:XrVisibilityMaskKHR structure
****
@@ -13294,10 +13933,11 @@ array contents are undefined.
<<fundamentals-errorcodes,Failure>>::
* ename:XR_ERROR_HANDLE_INVALID
* ename:XR_ERROR_INSTANCE_LOST
-* ename:XR_ERROR_SESSION_LOST
-* ename:XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED
* ename:XR_ERROR_RUNTIME_FAILURE
* ename:XR_ERROR_VALIDATION_FAILURE
+* ename:XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED
+* ename:XR_ERROR_SIZE_INSUFFICIENT
+* ename:XR_ERROR_SESSION_LOST
* ename:XR_ERROR_FUNCTION_UNSUPPORTED
****
@@ -13309,7 +13949,8 @@ array contents are undefined.
* Revision 1, 2018-07-05 (Paul Pedriana)
** Initial version.
-
+* Revision 2, 2019-07-15 (Alex Turner)
+** Adjust two-call idiom usage.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[XR_KHR_vulkan_enable]]
@@ -13324,7 +13965,7 @@ array contents are undefined.
*Revision*::
6
*Extension and Version Dependencies*::
- * Requires OpenXR 0.90
+ * Requires OpenXR 1.0
*Last Modified Date*::
2019-01-25
@@ -13361,7 +14002,9 @@ you must: define dlink:XR_USE_GRAPHICS_API_VULKAN before including the
OpenXR platform header `openxr_platform.h`, in all portions of your library
or application that include it.
-*Initialization* Some of the requirements for creating a valid
+*Initialization*
+
+Some of the requirements for creating a valid
slink:XrGraphicsBindingVulkanKHR include correct initialization of a
sname:VkInstance, sname:VkPhysicalDevice, and sname:VkDevice.
@@ -13464,13 +14107,13 @@ The slink:XrGraphicsBindingVulkanKHR structure is defined as:
[source,c++]
----
typedef struct XrGraphicsBindingVulkanKHR {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- VkInstance instance;
- VkPhysicalDevice physicalDevice;
- VkDevice device;
- uint32_t queueFamilyIndex;
- uint32_t queueIndex;
+ XrStructureType type;
+ const void* next;
+ VkInstance instance;
+ VkPhysicalDevice physicalDevice;
+ VkDevice device;
+ uint32_t queueFamilyIndex;
+ uint32_t queueIndex;
} XrGraphicsBindingVulkanKHR;
----
@@ -13507,12 +14150,10 @@ slink:XrSessionCreateInfo.
****
* [[VUID-XrGraphicsBindingVulkanKHR-extension-notenabled]] The `<<XR_KHR_vulkan_enable>>` extension must: be enabled prior to using slink:XrGraphicsBindingVulkanKHR
* [[VUID-XrGraphicsBindingVulkanKHR-type-type]] pname:type must: be ename:XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR
-* [[VUID-XrGraphicsBindingVulkanKHR-next-next]] pname:next must: be code:NULL
+* [[VUID-XrGraphicsBindingVulkanKHR-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
* [[VUID-XrGraphicsBindingVulkanKHR-instance-parameter]] pname:instance must: be a valid code:VkInstance value
* [[VUID-XrGraphicsBindingVulkanKHR-physicalDevice-parameter]] pname:physicalDevice must: be a valid code:VkPhysicalDevice value
* [[VUID-XrGraphicsBindingVulkanKHR-device-parameter]] pname:device must: be a valid code:VkDevice value
-* [[VUID-XrGraphicsBindingVulkanKHR-queueFamilyIndex-parameter]] pname:queueFamilyIndex must: be a valid code:uint32_t value
-* [[VUID-XrGraphicsBindingVulkanKHR-queueIndex-parameter]] pname:queueIndex must: be a valid code:uint32_t value
****
--
@@ -13526,9 +14167,9 @@ The slink:XrSwapchainImageVulkanKHR structure is defined as:
[source,c++]
----
typedef struct XrSwapchainImageVulkanKHR {
- XrStructureType type;
- void* XR_MAY_ALIAS next;
- VkImage image;
+ XrStructureType type;
+ void* next;
+ VkImage image;
} XrSwapchainImageVulkanKHR;
----
@@ -13561,7 +14202,7 @@ positive Y pointing down, near Z plane at 0, and far Z plane at 1.
****
* [[VUID-XrSwapchainImageVulkanKHR-extension-notenabled]] The `<<XR_KHR_vulkan_enable>>` extension must: be enabled prior to using slink:XrSwapchainImageVulkanKHR
* [[VUID-XrSwapchainImageVulkanKHR-type-type]] pname:type must: be ename:XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR
-* [[VUID-XrSwapchainImageVulkanKHR-next-next]] pname:next must: be code:NULL
+* [[VUID-XrSwapchainImageVulkanKHR-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
* [[VUID-XrSwapchainImageVulkanKHR-image-parameter]] pname:image must: be a valid code:VkImage value
****
@@ -13576,10 +14217,10 @@ The slink:XrGraphicsRequirementsVulkanKHR structure is defined as:
[source,c++]
----
typedef struct XrGraphicsRequirementsVulkanKHR {
- XrStructureType type;
- void* XR_MAY_ALIAS next;
- uint32_t minApiVersionSupported;
- uint32_t maxApiVersionSupported;
+ XrStructureType type;
+ void* next;
+ XrVersion minApiVersionSupported;
+ XrVersion maxApiVersionSupported;
} XrGraphicsRequirementsVulkanKHR;
----
@@ -13607,9 +14248,7 @@ version requirements.
****
* [[VUID-XrGraphicsRequirementsVulkanKHR-extension-notenabled]] The `<<XR_KHR_vulkan_enable>>` extension must: be enabled prior to using slink:XrGraphicsRequirementsVulkanKHR
* [[VUID-XrGraphicsRequirementsVulkanKHR-type-type]] pname:type must: be ename:XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR
-* [[VUID-XrGraphicsRequirementsVulkanKHR-next-next]] pname:next must: be code:NULL
-* [[VUID-XrGraphicsRequirementsVulkanKHR-minApiVersionSupported-parameter]] pname:minApiVersionSupported must: be a valid code:uint32_t value
-* [[VUID-XrGraphicsRequirementsVulkanKHR-maxApiVersionSupported-parameter]] pname:maxApiVersionSupported must: be a valid code:uint32_t value
+* [[VUID-XrGraphicsRequirementsVulkanKHR-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
****
--
@@ -13643,7 +14282,7 @@ XrResult xrGetVulkanGraphicsRequirementsKHR(
The flink:xrGetVulkanGraphicsRequirementsKHR function identifies to the
application the minimum Vulkan version requirement and the highest known
tested Vulkan version.
-flink:xrGetVulkanGraphicsRequirementsKHR has to be called prior to calling
+flink:xrGetVulkanGraphicsRequirementsKHR must: be called prior to calling
flink:xrCreateSession.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
@@ -13705,7 +14344,7 @@ XrResult xrGetVulkanGraphicsDeviceKHR(
flink:xrGetVulkanGraphicsDeviceKHR function identifies to the application
what graphics device (Vulkan sname:VkPhysicalDevice) needs to be used.
-flink:xrGetVulkanGraphicsDeviceKHR has to be called prior to calling
+flink:xrGetVulkanGraphicsDeviceKHR must: be called prior to calling
flink:xrCreateSession, and the sname:VkPhysicalDevice that
flink:xrGetVulkanGraphicsDeviceKHR returns should be passed to
flink:xrCreateSession in the slink:XrGraphicsBindingVulkanKHR.
@@ -13743,9 +14382,9 @@ flink:xrCreateSession in the slink:XrGraphicsBindingVulkanKHR.
XrResult xrGetVulkanInstanceExtensionsKHR(
XrInstance instance,
XrSystemId systemId,
- uint32_t namesCapacityInput,
- uint32_t* namesCountOutput,
- char* namesString);
+ uint32_t bufferCapacityInput,
+ uint32_t* bufferCountOutput,
+ char* buffer);
----
.Parameter Descriptions
@@ -13754,17 +14393,17 @@ XrResult xrGetVulkanInstanceExtensionsKHR(
flink:xrCreateInstance.
* pname:systemId is an basetype:XrSystemId handle for the system which will
be used to create a session.
-* pname:namesCapacityInput is the capacity of the pname:namesString array,
- or 0 to indicate a request to retrieve the required capacity.
-* pname:namesCountOutput is a pointer to the count of characters written
+* pname:bufferCapacityInput is the capacity of the pname:buffer, or 0 to
+ indicate a request to retrieve the required capacity.
+* pname:bufferCountOutput is a pointer to the count of characters written
(including terminating `\0`), or a pointer to the required capacity in the
- case that pname:namesCapacityInput is 0.
-* pname:namesString is a pointer to an array of characters, but can: be
- code:NULL if pname:namesCapacityInput is 0.
+ case that pname:bufferCapacityInput is 0.
+* pname:buffer is a pointer to an array of characters, but can: be code:NULL
+ if pname:bufferCapacityInput is 0.
The format of the output is a single space (ASCII `0x20`) delimited string
of extension names.
* See <<buffer-size-parameters, Buffer Size Parameters>> chapter for a
- detailed description of retrieving the required pname:namesString size.
+ detailed description of retrieving the required pname:buffer size.
****
The flink:xrGetVulkanGraphicsDeviceKHR function identifies to the
@@ -13780,9 +14419,8 @@ flink:xrCreateSession.
****
* [[VUID-xrGetVulkanInstanceExtensionsKHR-extension-notenabled]] The `<<XR_KHR_vulkan_enable>>` extension must: be enabled prior to calling flink:xrGetVulkanInstanceExtensionsKHR
* [[VUID-xrGetVulkanInstanceExtensionsKHR-instance-parameter]] pname:instance must: be a valid slink:XrInstance handle
-* [[VUID-xrGetVulkanInstanceExtensionsKHR-namesCapacityInput-parameter]] If pname:namesCapacityInput is not `0`, pname:namesCapacityInput must: be a valid code:uint32_t value
-* [[VUID-xrGetVulkanInstanceExtensionsKHR-namesCountOutput-parameter]] If pname:namesCountOutput is not code:NULL, pname:namesCountOutput must: be a pointer to a code:uint32_t value
-* [[VUID-xrGetVulkanInstanceExtensionsKHR-namesString-parameter]] If pname:namesCapacityInput is not `0`, pname:namesString must: be a pointer to an array of pname:namesCapacityInput null-terminated UTF-8 strings
+* [[VUID-xrGetVulkanInstanceExtensionsKHR-bufferCountOutput-parameter]] pname:bufferCountOutput must: be a pointer to a code:uint32_t value
+* [[VUID-xrGetVulkanInstanceExtensionsKHR-buffer-parameter]] If pname:bufferCapacityInput is not `0`, pname:buffer must: be a pointer to an array of pname:bufferCapacityInput null-terminated UTF-8 strings
****
.Return Codes
@@ -13810,9 +14448,9 @@ flink:xrCreateSession.
XrResult xrGetVulkanDeviceExtensionsKHR(
XrInstance instance,
XrSystemId systemId,
- uint32_t namesCapacityInput,
- uint32_t* namesCountOutput,
- char* namesString);
+ uint32_t bufferCapacityInput,
+ uint32_t* bufferCountOutput,
+ char* buffer);
----
.Parameter Descriptions
@@ -13821,17 +14459,17 @@ XrResult xrGetVulkanDeviceExtensionsKHR(
flink:xrCreateInstance.
* pname:systemId is an basetype:XrSystemId handle for the system which will
be used to create a session.
-* pname:namesCapacityInput is the capacity of the pname:namesString array,
- or 0 to indicate a request to retrieve the required capacity.
-* pname:namesCountOutput is a pointer to the count of characters written
+* pname:bufferCapacityInput is the capacity of the pname:buffer, or 0 to
+ indicate a request to retrieve the required capacity.
+* pname:bufferCountOutput is a pointer to the count of characters written
(including terminating `\0`), or a pointer to the required capacity in the
- case that pname:namesCapacityInput is 0.
-* pname:namesString is a pointer to an array of characters, but can: be
- code:NULL if pname:namesCapacityInput is 0.
+ case that pname:bufferCapacityInput is 0.
+* pname:buffer is a pointer to an array of characters, but can: be code:NULL
+ if pname:bufferCapacityInput is 0.
The format of the output is a single space (ASCII `0x20`) delimited string
of extension names.
* See <<buffer-size-parameters, Buffer Size Parameters>> chapter for a
- detailed description of retrieving the required pname:namesString size.
+ detailed description of retrieving the required pname:buffer size.
****
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
@@ -13839,9 +14477,8 @@ XrResult xrGetVulkanDeviceExtensionsKHR(
****
* [[VUID-xrGetVulkanDeviceExtensionsKHR-extension-notenabled]] The `<<XR_KHR_vulkan_enable>>` extension must: be enabled prior to calling flink:xrGetVulkanDeviceExtensionsKHR
* [[VUID-xrGetVulkanDeviceExtensionsKHR-instance-parameter]] pname:instance must: be a valid slink:XrInstance handle
-* [[VUID-xrGetVulkanDeviceExtensionsKHR-namesCapacityInput-parameter]] If pname:namesCapacityInput is not `0`, pname:namesCapacityInput must: be a valid code:uint32_t value
-* [[VUID-xrGetVulkanDeviceExtensionsKHR-namesCountOutput-parameter]] If pname:namesCountOutput is not code:NULL, pname:namesCountOutput must: be a pointer to a code:uint32_t value
-* [[VUID-xrGetVulkanDeviceExtensionsKHR-namesString-parameter]] If pname:namesCapacityInput is not `0`, pname:namesString must: be a pointer to an array of pname:namesCapacityInput null-terminated UTF-8 strings
+* [[VUID-xrGetVulkanDeviceExtensionsKHR-bufferCountOutput-parameter]] pname:bufferCountOutput must: be a pointer to a code:uint32_t value
+* [[VUID-xrGetVulkanDeviceExtensionsKHR-buffer-parameter]] If pname:bufferCapacityInput is not `0`, pname:buffer must: be a pointer to an array of pname:bufferCapacityInput null-terminated UTF-8 strings
****
.Return Codes
@@ -13869,7 +14506,7 @@ XrResult xrGetVulkanDeviceExtensionsKHR(
* Revision 2, 2018-06-21 (Bryce Hutchings)
** Replace `session` parameter with `instance` and `systemId` parameters.
** Move `xrGetVulkanDeviceExtensionsKHR`, `xrGetVulkanInstanceExtensionsKHR`
-and `xrGetVulkanGraphicsDeviceKHR` functions into this extension
+ and `xrGetVulkanGraphicsDeviceKHR` functions into this extension
** Add new `XrGraphicsRequirementsVulkanKHR` function.
* Revision 3, 2018-11-15 (Paul Pedriana)
** Specified the swapchain texture coordinate origin.
@@ -13892,9 +14529,9 @@ and `xrGetVulkanGraphicsDeviceKHR` functions into this extension
*Registered Extension Number*::
15
*Revision*::
- 1
+ 2
*Extension and Version Dependencies*::
- * Requires OpenXR 0.90
+ * Requires OpenXR 1.0
* Requires `<<XR_KHR_vulkan_enable>>`
*Last Modified Date*::
@@ -13915,7 +14552,7 @@ This OpenXR extension exposes that Vulkan extension to OpenXR applications.
In the same way that a Vulkan-based application can pass a
sname:VkImageFormatListCreateInfo struct to the fname:vkCreateImage
function, an OpenXR application can pass an identically configured
-slink:XrVulkanSwapchainFormatListCreateInfoKHR struct to
+slink:XrVulkanSwapchainFormatListCreateInfoKHR structure to
flink:xrCreateSwapchain.
Applications using this extension to specify more than one swapchain format
@@ -13951,10 +14588,10 @@ elink:XrStructureType enumeration is extended with:
[source,c++]
----
typedef struct XrVulkanSwapchainFormatListCreateInfoKHR {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- uint32_t viewFormatCount;
- const VkFormat* viewFormats;
+ XrStructureType type;
+ const void* next;
+ uint32_t viewFormatCount;
+ const VkFormat* viewFormats;
} XrVulkanSwapchainFormatListCreateInfoKHR;
----
@@ -13972,9 +14609,8 @@ typedef struct XrVulkanSwapchainFormatListCreateInfoKHR {
****
* [[VUID-XrVulkanSwapchainFormatListCreateInfoKHR-extension-notenabled]] The `<<XR_KHR_vulkan_swapchain_format_list>>` extension must: be enabled prior to using slink:XrVulkanSwapchainFormatListCreateInfoKHR
* [[VUID-XrVulkanSwapchainFormatListCreateInfoKHR-type-type]] pname:type must: be ename:XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR
-* [[VUID-XrVulkanSwapchainFormatListCreateInfoKHR-next-next]] pname:next must: be code:NULL
-* [[VUID-XrVulkanSwapchainFormatListCreateInfoKHR-viewFormatCount-parameter]] If pname:viewFormatCount is not `0`, pname:viewFormatCount must: be a valid code:uint32_t value
-* [[VUID-XrVulkanSwapchainFormatListCreateInfoKHR-viewFormats-parameter]] If pname:viewFormatCount is not `0`, pname:viewFormats must: be a pointer to an array of pname:viewFormatCount code:VkFormat values
+* [[VUID-XrVulkanSwapchainFormatListCreateInfoKHR-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrVulkanSwapchainFormatListCreateInfoKHR-viewFormats-parameter]] If pname:viewFormatCount is not `0`, pname:viewFormats must: be a pointer to an array of pname:viewFormatCount valid code:VkFormat values
****
--
@@ -14004,23 +14640,23 @@ typedef struct XrVulkanSwapchainFormatListCreateInfoKHR {
*Revision*::
1
*Extension and Version Dependencies*::
- * Requires OpenXR 0.90
+ * Requires OpenXR 1.0
*Last Modified Date*::
2019-01-24
*IP Status*::
No known IP claims.
*Contributors*::
- Paul Pedriana, Oculus
+ Paul Pedriana, Oculus Bryce Hutchings, Microsoft
*Overview*
-This extension provides two functions for converting between Windows
-code:QueryPerformanceCounter time and basetype:XrTime.
+This extension provides two functions for converting between the Windows
+performance counter (QPC) time stamps and basetype:XrTime.
The flink:xrConvertWin32PerformanceCounterToTimeKHR function converts from
-Win32 code:QueryPerformanceCounter time to basetype:XrTime, while the
+Windows performance counter time stamps to basetype:XrTime, while the
flink:xrConvertTimeToWin32PerformanceCounterKHR function converts
-basetype:XrTime to Win32 code:QueryPerformanceCounter time.
+basetype:XrTime to Windows performance counter time stamps.
The primary use case for this functionality is to be able to synchronize
events between the local system and the OpenXR system.
@@ -14038,7 +14674,7 @@ events between the local system and the OpenXR system.
[open,refpage='xrConvertWin32PerformanceCounterToTimeKHR',type='protos',desc='Convert Win32 code:QueryPerformanceCounter time to XrTime',xrefs='XrTime']
--
-To convert from Win32 code:QueryPerformanceCounter time to basetype:XrTime,
+To convert from a Windows performance counter time stamp to basetype:XrTime,
call:
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
@@ -14062,9 +14698,13 @@ XrResult xrConvertWin32PerformanceCounterToTimeKHR(
****
The flink:xrConvertWin32PerformanceCounterToTimeKHR function converts a time
-obtained by the Win32 code:QueryPerformanceCounter function to the
+stamp obtained by the code:QueryPerformanceCounter Windows function to the
equivalent basetype:XrTime.
+If the output pname:time cannot represent the input
+pname:performanceCounter, the runtime must: return
+ename:XR_ERROR_TIME_INVALID.
+
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
****
@@ -14083,6 +14723,7 @@ equivalent basetype:XrTime.
* ename:XR_ERROR_INSTANCE_LOST
* ename:XR_ERROR_RUNTIME_FAILURE
* ename:XR_ERROR_VALIDATION_FAILURE
+* ename:XR_ERROR_TIME_INVALID
* ename:XR_ERROR_FUNCTION_UNSUPPORTED
****
@@ -14090,7 +14731,7 @@ equivalent basetype:XrTime.
[open,refpage='xrConvertTimeToWin32PerformanceCounterKHR',type='protos',desc='Convert XrTime to Win32 code:QueryPerformanceCounter time',xrefs='XrTime']
--
-To convert from basetype:XrTime to Win32 code:QueryPerformanceCounter time,
+To convert from basetype:XrTime to a Windows performance counter time stamp,
call:
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
@@ -14108,13 +14749,16 @@ XrResult xrConvertTimeToWin32PerformanceCounterKHR(
* pname:instance is an slink:XrInstance handle previously created with
flink:xrCreateInstance.
* pname:time is an basetype:XrTime.
-* pname:performanceCounter is the resulting Win32
- code:QueryPerformanceCounter time that is equivalent to the pname:time.
+* pname:performanceCounter is the resulting Windows performance counter time
+ stamp that is equivalent to the pname:time.
****
The flink:xrConvertTimeToWin32PerformanceCounterKHR function converts an
-basetype:XrTime to time as if generated by Win32
-code:QueryPerformanceCounter.
+basetype:XrTime to time as if generated by the code:QueryPerformanceCounter
+Windows function.
+
+If the output pname:performanceCounter cannot represent the input
+pname:time, the runtime must: return ename:XR_ERROR_TIME_INVALID.
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
.Valid Usage (Implicit)
@@ -14133,6 +14777,7 @@ code:QueryPerformanceCounter.
* ename:XR_ERROR_INSTANCE_LOST
* ename:XR_ERROR_RUNTIME_FAILURE
* ename:XR_ERROR_VALIDATION_FAILURE
+* ename:XR_ERROR_TIME_INVALID
* ename:XR_ERROR_FUNCTION_UNSUPPORTED
****
@@ -14157,9 +14802,9 @@ code:QueryPerformanceCounter.
*Registered Extension Number*::
20
*Revision*::
- 2
+ 3
*Extension and Version Dependencies*::
- * Requires OpenXR 0.90
+ * Requires OpenXR 1.0
:INCS-VAR: ../../../../generated
@@ -14260,6 +14905,9 @@ Currently we have the following message types:
that may: indicate invalid OpenXR usage.
|ename:XR_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT
| Specifies a potentially non-optimal use of OpenXR.
+|ename:XR_DEBUG_UTILS_MESSAGE_TYPE_CONFORMANCE_BIT_EXT
+ | Specifies a non-conformant OpenXR result.
+ This is typically caused by a layer or runtime returning non-conformant data.
|=======================================================================
A message may correspond to more than one type.
@@ -14381,6 +15029,8 @@ filters registered with the runtime.
*New Flag Types*
+[open,refpage='XrDebugUtilsMessageSeverityFlagsEXT',type='flags',desc='XrDebugUtilsMessageSeverityFlagsEXT']
+--
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[XrDebugUtilsMessageSeverityFlagsEXT,XrDebugUtilsMessageSeverityFlagsEXT]]
[source,c++]
@@ -14388,6 +15038,10 @@ filters registered with the runtime.
typedef XrFlags64 XrDebugUtilsMessageSeverityFlagsEXT;
----
+--
+
+[open,refpage='XrDebugUtilsMessageSeverityFlagBitsEXT',type='enums',desc='XrDebugUtilsMessageSeverityFlagBitsEXT']
+--
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[XrDebugUtilsMessageSeverityFlagBitsEXT,XrDebugUtilsMessageSeverityFlagBitsEXT]]
[source,c++]
@@ -14399,7 +15053,10 @@ static const XrDebugUtilsMessageSeverityFlagsEXT XR_DEBUG_UTILS_MESSAGE_SEVERITY
static const XrDebugUtilsMessageSeverityFlagsEXT XR_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT = 0x00001000;
----
+--
+[open,refpage='XrDebugUtilsMessageTypeFlagsEXT',type='flags',desc='XrDebugUtilsMessageTypeFlagsEXT']
+--
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[XrDebugUtilsMessageTypeFlagsEXT,XrDebugUtilsMessageTypeFlagsEXT]]
[source,c++]
@@ -14407,6 +15064,10 @@ static const XrDebugUtilsMessageSeverityFlagsEXT XR_DEBUG_UTILS_MESSAGE_SEVERITY
typedef XrFlags64 XrDebugUtilsMessageTypeFlagsEXT;
----
+--
+
+[open,refpage='XrDebugUtilsMessageTypeFlagBitsEXT',type='enums',desc='XrDebugUtilsMessageTypeFlagBitsEXT']
+--
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[XrDebugUtilsMessageTypeFlagBitsEXT,XrDebugUtilsMessageTypeFlagBitsEXT]]
[source,c++]
@@ -14415,8 +15076,10 @@ typedef XrFlags64 XrDebugUtilsMessageTypeFlagsEXT;
static const XrDebugUtilsMessageTypeFlagsEXT XR_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT = 0x00000001;
static const XrDebugUtilsMessageTypeFlagsEXT XR_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT = 0x00000002;
static const XrDebugUtilsMessageTypeFlagsEXT XR_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT = 0x00000004;
+static const XrDebugUtilsMessageTypeFlagsEXT XR_DEBUG_UTILS_MESSAGE_TYPE_CONFORMANCE_BIT_EXT = 0x00000008;
----
+--
*New Enum Constants*
@@ -14427,10 +15090,6 @@ elink:XrStructureType enumeration is extended with:
* ename:XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT
* ename:XR_TYPE_DEBUG_UTILS_LABEL_EXT
-elink:XrResult enumeration is extended with:
-
-* ename:XR_ERROR_DEBUG_UTILS_MESSENGER_INVALID_EXT
-
*New Enums*
@@ -14444,11 +15103,11 @@ elink:XrResult enumeration is extended with:
[source,c++]
----
typedef struct XrDebugUtilsObjectNameInfoEXT {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- XrObjectType objectType;
- uint64_t objectHandle;
- const char* objectName;
+ XrStructureType type;
+ const void* next;
+ XrObjectType objectType;
+ uint64_t objectHandle;
+ const char* objectName;
} XrDebugUtilsObjectNameInfoEXT;
----
@@ -14476,9 +15135,8 @@ typedef struct XrDebugUtilsObjectNameInfoEXT {
****
* [[VUID-XrDebugUtilsObjectNameInfoEXT-extension-notenabled]] The `<<XR_EXT_debug_utils>>` extension must: be enabled prior to using slink:XrDebugUtilsObjectNameInfoEXT
* [[VUID-XrDebugUtilsObjectNameInfoEXT-type-type]] pname:type must: be ename:XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT
-* [[VUID-XrDebugUtilsObjectNameInfoEXT-next-next]] pname:next must: be code:NULL
-* [[VUID-XrDebugUtilsObjectNameInfoEXT-objectType-parameter]] pname:objectType must: be a valid slink:XrObjectType value
-* [[VUID-XrDebugUtilsObjectNameInfoEXT-objectHandle-parameter]] pname:objectHandle must: be a valid code:uint64_t value
+* [[VUID-XrDebugUtilsObjectNameInfoEXT-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrDebugUtilsObjectNameInfoEXT-objectType-parameter]] pname:objectType must: be a valid elink:XrObjectType value
* [[VUID-XrDebugUtilsObjectNameInfoEXT-objectName-parameter]] If pname:objectName is not code:NULL, pname:objectName must: be a null-terminated UTF-8 string
****
@@ -14492,9 +15150,9 @@ typedef struct XrDebugUtilsObjectNameInfoEXT {
[source,c++]
----
typedef struct XrDebugUtilsLabelEXT {
- XrStructureType type;
- const void* XR_MAY_ALIAS next;
- const char* labelName;
+ XrStructureType type;
+ const void* next;
+ const char* labelName;
} XrDebugUtilsLabelEXT;
----
@@ -14511,7 +15169,7 @@ typedef struct XrDebugUtilsLabelEXT {
****
* [[VUID-XrDebugUtilsLabelEXT-extension-notenabled]] The `<<XR_EXT_debug_utils>>` extension must: be enabled prior to using slink:XrDebugUtilsLabelEXT
* [[VUID-XrDebugUtilsLabelEXT-type-type]] pname:type must: be ename:XR_TYPE_DEBUG_UTILS_LABEL_EXT
-* [[VUID-XrDebugUtilsLabelEXT-next-next]] pname:next must: be code:NULL
+* [[VUID-XrDebugUtilsLabelEXT-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
* [[VUID-XrDebugUtilsLabelEXT-labelName-parameter]] pname:labelName must: be a null-terminated UTF-8 string
****
@@ -14525,7 +15183,7 @@ typedef struct XrDebugUtilsLabelEXT {
----
typedef struct XrDebugUtilsMessengerCallbackDataEXT {
XrStructureType type;
- const void* XR_MAY_ALIAS next;
+ const void* next;
const char* messageId;
const char* functionName;
const char* message;
@@ -14556,14 +15214,14 @@ typedef struct XrDebugUtilsMessengerCallbackDataEXT {
conditions.
* pname:objectCount is a count of items contained in the pname:objects
array.
- This may be 0.
+ This may be `0`.
* pname:objects is a pointer to an array of
slink:XrDebugUtilsObjectNameInfoEXT objects related to the detected issue.
The array is roughly in order or importance, but the 0th element is always
guaranteed to be the most important object for this message.
* pname:sessionLabelCount is a count of items contained in the
pname:sessionLabels array.
- This may be 0.
+ This may be `0`.
* pname:sessionLabels is a pointer to an array of slink:XrDebugUtilsLabelEXT
objects related to the detected issue.
The array is roughly in order or importance, but the 0th element is always
@@ -14579,12 +15237,10 @@ typedef struct XrDebugUtilsMessengerCallbackDataEXT {
****
* [[VUID-XrDebugUtilsMessengerCallbackDataEXT-extension-notenabled]] The `<<XR_EXT_debug_utils>>` extension must: be enabled prior to using slink:XrDebugUtilsMessengerCallbackDataEXT
* [[VUID-XrDebugUtilsMessengerCallbackDataEXT-type-type]] pname:type must: be ename:XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT
-* [[VUID-XrDebugUtilsMessengerCallbackDataEXT-next-next]] pname:next must: be code:NULL
+* [[VUID-XrDebugUtilsMessengerCallbackDataEXT-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
* [[VUID-XrDebugUtilsMessengerCallbackDataEXT-messageId-parameter]] pname:messageId must: be a null-terminated UTF-8 string
* [[VUID-XrDebugUtilsMessengerCallbackDataEXT-functionName-parameter]] pname:functionName must: be a null-terminated UTF-8 string
* [[VUID-XrDebugUtilsMessengerCallbackDataEXT-message-parameter]] pname:message must: be a null-terminated UTF-8 string
-* [[VUID-XrDebugUtilsMessengerCallbackDataEXT-objectCount-parameter]] If pname:objectCount is not `0`, pname:objectCount must: be a valid code:uint32_t value
-* [[VUID-XrDebugUtilsMessengerCallbackDataEXT-sessionLabelCount-parameter]] If pname:sessionLabelCount is not `0`, pname:sessionLabelCount must: be a valid code:uint32_t value
****
@@ -14611,11 +15267,11 @@ appearing last.
----
typedef struct XrDebugUtilsMessengerCreateInfoEXT {
XrStructureType type;
- const void* XR_MAY_ALIAS next;
+ const void* next;
XrDebugUtilsMessageSeverityFlagsEXT messageSeverities;
XrDebugUtilsMessageTypeFlagsEXT messageTypes;
PFN_xrDebugUtilsMessengerCallbackEXT userCallback;
- void* XR_MAY_ALIAS userData;
+ void* userData;
} XrDebugUtilsMessengerCreateInfoEXT;
----
@@ -14643,7 +15299,7 @@ typedef struct XrDebugUtilsMessengerCreateInfoEXT {
****
* [[VUID-XrDebugUtilsMessengerCreateInfoEXT-extension-notenabled]] The `<<XR_EXT_debug_utils>>` extension must: be enabled prior to using slink:XrDebugUtilsMessengerCreateInfoEXT
* [[VUID-XrDebugUtilsMessengerCreateInfoEXT-type-type]] pname:type must: be ename:XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT
-* [[VUID-XrDebugUtilsMessengerCreateInfoEXT-next-next]] pname:next must: be code:NULL
+* [[VUID-XrDebugUtilsMessengerCreateInfoEXT-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
* [[VUID-XrDebugUtilsMessengerCreateInfoEXT-messageSeverities-parameter]] pname:messageSeverities must: be a valid combination of elink:XrDebugUtilsMessageSeverityFlagBitsEXT values
* [[VUID-XrDebugUtilsMessengerCreateInfoEXT-messageSeverities-requiredbitmask]] pname:messageSeverities must: not be `0`
* [[VUID-XrDebugUtilsMessengerCreateInfoEXT-messageTypes-parameter]] pname:messageTypes must: be a valid combination of elink:XrDebugUtilsMessageTypeFlagBitsEXT values
@@ -14664,14 +15320,14 @@ event occurs is as follows:
slink:XrDebugUtilsMessengerCreateInfoEXT::pname:messageSeverities provided
during creation of the slink:XrDebugUtilsMessengerEXT object.
-* If this results in 0, the message is skipped.
+* If this results in `0`, the message is skipped.
* The runtime will perform bitwise AND of the event's
elink:XrDebugUtilsMessageTypeFlagBitsEXT with the
slink:XrDebugUtilsMessengerCreateInfoEXT::pname:messageTypes provided
during the creation of the slink:XrDebugUtilsMessengerEXT object.
-* If this results in 0, the message is skipped.
+* If this results in `0`, the message is skipped.
* If the message of the current event is not skipped, the callback will be
called with the message.
@@ -14733,9 +15389,9 @@ XrResult xrSetDebugUtilsObjectNameEXT(
* [[VUID-xrSetDebugUtilsObjectNameEXT-nameInfo-parameter]] pname:nameInfo must: be a pointer to a valid slink:XrDebugUtilsObjectNameInfoEXT structure
****
-.Host Synchronization
+.Thread Safety
****
-* Host access to pname:nameInfo.objectHandle must: be externally synchronized
+* Access to the pname:objectHandle member of the pname:nameInfo parameter must: be externally synchronized
****
.Return Codes
@@ -14789,6 +15445,11 @@ XrResult xrCreateDebugUtilsMessengerEXT(
* [[VUID-xrCreateDebugUtilsMessengerEXT-messenger-parameter]] pname:messenger must: be a pointer to an slink:XrDebugUtilsMessengerEXT handle
****
+.Thread Safety
+****
+* Access to pname:instance, and any child handles, must: be externally synchronized
+****
+
.Return Codes
****
<<fundamentals-successcodes,Success>>::
@@ -14806,7 +15467,7 @@ XrResult xrCreateDebugUtilsMessengerEXT(
The application must: ensure that flink:xrCreateDebugUtilsMessengerEXT is
not executed in parallel with any OpenXR function that is also called with
-pname:instance or child of pname:instance as the dispatchable argument.
+pname:instance or child of pname:instance.
When an event of interest occurs a debug messenger calls its
pname:createInfo\->pname:userCallback with a debug message from the producer
@@ -14842,21 +15503,25 @@ XrResult xrDestroyDebugUtilsMessengerEXT(
* [[VUID-xrDestroyDebugUtilsMessengerEXT-messenger-parameter]] pname:messenger must: be a valid slink:XrDebugUtilsMessengerEXT handle
****
+.Thread Safety
+****
+* Access to pname:messenger must: be externally synchronized
+* Access to the slink:XrInstance used to create pname:messenger, and all of its child handles must: be externally synchronized
+****
+
.Return Codes
****
<<fundamentals-successcodes,Success>>::
* ename:XR_SUCCESS
<<fundamentals-errorcodes,Failure>>::
-* ename:XR_ERROR_VALIDATION_FAILURE
-* ename:XR_ERROR_RUNTIME_FAILURE
-* ename:XR_ERROR_DEBUG_UTILS_MESSENGER_INVALID_EXT
+* ename:XR_ERROR_HANDLE_INVALID
* ename:XR_ERROR_FUNCTION_UNSUPPORTED
****
The application must: ensure that flink:xrDestroyDebugUtilsMessengerEXT is
not executed in parallel with any OpenXR function that is also called with
-pname:instance or child of pname:instance as the dispatchable argument.
+the pname:instance or child of pname:instance that it was created with.
--
[open,refpage='xrSubmitDebugUtilsMessageEXT',type='protos',desc='Submits debug utils message',xrefs='']
@@ -15151,55 +15816,51 @@ code:OutputDebugString.
The second will cause the debugger to break at that callback when an error
happens and the third will log warnings to stdout.
-
-[source,c++,suppress-build]
+[source,c++]
------------------------------------------------------------------------------
- XrInstance instance; // previously initialized
- XrResult res;
- XrDebugUtilsMessengerEXT messenger1, messenger2, messenger3;
+ extern XrInstance instance; // previously initialized
// Must call extension functions through a function pointer:
PFN_xrCreateDebugUtilsMessengerEXT pfnCreateDebugUtilsMessengerEXT;
- res = xrGetInstanceProcAddr(instance, "xrCreateDebugUtilsMessengerEXT", reinterpret_cast<PFN_xrVoidFunction*>(&pfnCreateDebugUtilsMessengerEXT));
+ CHK_XR(xrGetInstanceProcAddr(instance, "xrCreateDebugUtilsMessengerEXT",
+ reinterpret_cast<PFN_xrVoidFunction*>(
+ &pfnCreateDebugUtilsMessengerEXT)));
+
PFN_xrDestroyDebugUtilsMessengerEXT pfnDestroyDebugUtilsMessengerEXT;
- res = xrGetInstanceProcAddr(instance, "xrDestroyDebugUtilsMessengerEXT", reinterpret_cast<PFN_xrVoidFunction*>(&pfnDestroyDebugUtilsMessengerEXT));
+ CHK_XR(xrGetInstanceProcAddr(instance, "xrDestroyDebugUtilsMessengerEXT",
+ reinterpret_cast<PFN_xrVoidFunction*>(
+ &pfnDestroyDebugUtilsMessengerEXT)));
XrDebugUtilsMessengerCreateInfoEXT callback1 = {
- XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT, // type
- NULL, // next
- XR_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT | // messageSeverities
+ XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT, // type
+ NULL, // next
+ XR_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT | // messageSeverities
XR_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT,
- XR_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | // messageTypes
+ XR_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | // messageTypes
XR_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT,
- myOutputDebugString, // userCallback
- NULL // userData
+ myOutputDebugString, // userCallback
+ NULL // userData
};
- res = pfnCreateDebugUtilsMessengerEXT(instance, &callback1, &messenger1);
- if (res != XR_SUCCESS) {
- // Do error handling
- }
+ XrDebugUtilsMessengerEXT messenger1 = XR_NULL_HANDLE;
+ CHK_XR(pfnCreateDebugUtilsMessengerEXT(instance, &callback1, &messenger1));
callback1.messageSeverities = XR_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
callback1.userCallback = myDebugBreak;
callback1.userData = NULL;
- res = pfnCreateDebugUtilsMessengerEXT(instance, &callback1, &messenger2);
- if (res != XR_SUCCESS) {
- // Do error handling
- }
+ XrDebugUtilsMessengerEXT messenger2 = XR_NULL_HANDLE;
+ CHK_XR(pfnCreateDebugUtilsMessengerEXT(instance, &callback1, &messenger2));
XrDebugUtilsMessengerCreateInfoEXT callback3 = {
- XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT, // type
- NULL, // next
- XR_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT, // messageSeverities
- XR_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | // messageTypes
+ XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT, // type
+ NULL, // next
+ XR_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT, // messageSeverities
+ XR_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | // messageTypes
XR_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT,
- myStdOutLogger, // userCallback
- NULL // userData
+ myStdOutLogger, // userCallback
+ NULL // userData
};
- res = pfnCreateDebugUtilsMessengerEXT(instance, &callback3, &messenger3);
- if (res != XR_SUCCESS) {
- // Do error handling
- }
+ XrDebugUtilsMessengerEXT messenger3 = XR_NULL_HANDLE;
+ CHK_XR(pfnCreateDebugUtilsMessengerEXT(instance, &callback3, &messenger3));
// ...
@@ -15215,24 +15876,24 @@ Associate a name with an slink:XrSpace, for easier debugging in external
tools or with validation layers that can print a friendly name when
referring to objects in error messages.
-
-[source,c++,suppress-build]
+[source,c++]
----------------------------------------
- extern XrInstance instance;
- extern XrSpace space;
+ extern XrInstance instance; // previously initialized
+ extern XrSpace space; // previously initialized
// Must call extension functions through a function pointer:
PFN_xrSetDebugUtilsObjectNameEXT pfnSetDebugUtilsObjectNameEXT;
- xrGetInstanceProcAddr(instance, "xrSetDebugUtilsObjectNameEXT", reinterpret_cast<PFN_xrVoidFunction*>(&pfnSetDebugUtilsObjectNameEXT));
+ CHK_XR(xrGetInstanceProcAddr(instance, "xrSetDebugUtilsObjectNameEXT",
+ reinterpret_cast<PFN_xrVoidFunction*>(
+ &pfnSetDebugUtilsObjectNameEXT)));
// Set a name on the space
- const XrDebugUtilsObjectNameInfoEXT spaceNameInfo =
- {
- XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT, // type
- NULL, // next
- XR_OBJECT_TYPE_SPACE, // objectType
- (uint64_t)space, // objectHandle
- "My Object-Specific Space", // objectName
+ const XrDebugUtilsObjectNameInfoEXT spaceNameInfo = {
+ XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT, // type
+ NULL, // next
+ XR_OBJECT_TYPE_SPACE, // objectType
+ (uint64_t)space, // objectHandle
+ "My Object-Specific Space", // objectName
};
pfnSetDebugUtilsObjectNameEXT(instance, &spaceNameInfo);
@@ -15248,98 +15909,117 @@ Labeling the workload with naming information so that any form of analysis
can display a more usable visualization of where actions occur in the
lifetime of a session.
-[source,c++,suppress-build]
+[source,c++]
----------------------------------------
- extern XrInstance instance;
- extern XrSession session;
- extern XrSessionBeginInfo session_begin_info;
- extern XrFrameBeginInfo begin_frame_info;
- extern XrFrameEndInfo end_frame_info;
- extern XrFrameWaitInfo wait_frame_info;
- extern XrFrameState frame_state;
+ extern XrInstance instance; // previously initialized
+ extern XrSession session; // previously initialized
// Must call extension functions through a function pointer:
- PFN_xrSessionBeginDebugUtilsLabelRegionEXT pfn_xrSessionBeginDebugUtilsLabelRegionEXT = (PFN_xrSessionBeginDebugUtilsLabelRegionEXT)xrGetInstanceProcAddr(instance, "xrSessionBeginDebugUtilsLabelRegionEXT");
- PFN_xrSessionEndDebugUtilsLabelRegionEXT pfn_xrSessionEndDebugUtilsLabelRegionEXT = (PFN_xrSessionEndDebugUtilsLabelRegionEXT)xrGetInstanceProcAddr(instance, "xrSessionEndDebugUtilsLabelRegionEXT");
- PFN_xrSessionInsertDebugUtilsLabelEXT pfn_xrSessionInsertDebugUtilsLabelEXT = (PFN_xrSessionInsertDebugUtilsLabelEXT)xrGetInstanceProcAddr(instance, "xrSessionInsertDebugUtilsLabelEXT");
-
- const XrDebugUtilsLabelEXT session_active_region_label =
- {
- XR_TYPE_DEBUG_UTILS_LABEL_EXT, // type
- NULL, // next
- "Session active", // labelName
+
+ PFN_xrSessionBeginDebugUtilsLabelRegionEXT pfnSessionBeginDebugUtilsLabelRegionEXT;
+ CHK_XR(xrGetInstanceProcAddr(instance, "xrSessionBeginDebugUtilsLabelRegionEXT",
+ reinterpret_cast<PFN_xrVoidFunction*>(
+ &pfnSessionBeginDebugUtilsLabelRegionEXT)));
+
+ PFN_xrSessionEndDebugUtilsLabelRegionEXT pfnSessionEndDebugUtilsLabelRegionEXT;
+ CHK_XR(xrGetInstanceProcAddr(instance, "xrSessionEndDebugUtilsLabelRegionEXT",
+ reinterpret_cast<PFN_xrVoidFunction*>(
+ &pfnSessionEndDebugUtilsLabelRegionEXT)));
+
+ PFN_xrSessionInsertDebugUtilsLabelEXT pfnSessionInsertDebugUtilsLabelEXT;
+ CHK_XR(xrGetInstanceProcAddr(instance, "xrSessionInsertDebugUtilsLabelEXT",
+ reinterpret_cast<PFN_xrVoidFunction*>(
+ &pfnSessionInsertDebugUtilsLabelEXT)));
+
+ XrSessionBeginInfo session_begin_info = {
+ XR_TYPE_SESSION_BEGIN_INFO,
+ nullptr,
+ XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO
};
+ xrBeginSession(session, &session_begin_info);
- xrSessionBegin(session, &session_begin_info);
+ const XrDebugUtilsLabelEXT session_active_region_label = {
+ XR_TYPE_DEBUG_UTILS_LABEL_EXT, // type
+ NULL, // next
+ "Session active", // labelName
+ };
// Start an annotated region of calls under the 'Session Active' name
- pfn_xrSessionBeginDebugUtilsLabelRegionEXT(session, &session_active_region_label);
+ pfnSessionBeginDebugUtilsLabelRegionEXT(session, &session_active_region_label);
// Brackets added for clarity
{
- XrDebugUtilsLabelEXT individual_label =
- {
- XR_TYPE_DEBUG_UTILS_LABEL_EXT, // type
- NULL, // next
- "WaitFrame", // labelName
+ XrDebugUtilsLabelEXT individual_label = {
+ XR_TYPE_DEBUG_UTILS_LABEL_EXT, // type
+ NULL, // next
+ "WaitFrame", // labelName
};
const char wait_frame_label[] = "WaitFrame";
individual_label.labelName = wait_frame_label;
- pfn_xrSessionInsertDebugUtilsLabelEXT(session, individual_label);
+ pfnSessionInsertDebugUtilsLabelEXT(session, &individual_label);
+ XrFrameWaitInfo wait_frame_info; // initialization omitted for readability
+ XrFrameState frame_state = {XR_TYPE_FRAME_STATE, nullptr};
xrWaitFrame(session, &wait_frame_info, &frame_state);
// Do stuff 1
- const XrDebugUtilsLabelEXT session_frame_region_label =
- {
- XR_TYPE_DEBUG_UTILS_LABEL_EXT, // type
- NULL, // next
- "Session Frame 123", // labelName
+ const XrDebugUtilsLabelEXT session_frame_region_label = {
+ XR_TYPE_DEBUG_UTILS_LABEL_EXT, // type
+ NULL, // next
+ "Session Frame 123", // labelName
};
-
// Start an annotated region of calls under the 'Session Frame 123' name
- pfn_xrSessionBeginDebugUtilsLabelRegionEXT(session, &session_frame_region_label);
+ pfnSessionBeginDebugUtilsLabelRegionEXT(session, &session_frame_region_label);
// Brackets added for clarity
{
const char begin_frame_label[] = "BeginFrame";
individual_label.labelName = begin_frame_label;
- pfn_xrSessionInsertDebugUtilsLabelEXT(session, individual_label);
+ pfnSessionInsertDebugUtilsLabelEXT(session, &individual_label);
+
+ XrFrameBeginInfo begin_frame_info; // initialization omitted for readability
xrBeginFrame(session, &begin_frame_info);
// Do stuff 2
const char end_frame_label[] = "EndFrame";
individual_label.labelName = end_frame_label;
- pfn_xrSessionInsertDebugUtilsLabelEXT(session, individual_label);
+ pfnSessionInsertDebugUtilsLabelEXT(session, &individual_label);
+
+ XrFrameEndInfo end_frame_info; // initialization omitted for readability
xrEndFrame(session, &end_frame_info);
}
- // End the session/begun region started above (in this case it's the "Session Frame 123" label)
- pfn_xrSessionEndDebugUtilsLabelRegionEXT(session);
+ // End the session/begun region started above
+ // (in this case it's the "Session Frame 123" label)
+ pfnSessionEndDebugUtilsLabelRegionEXT(session);
}
- // End the session/begun region started above (in this case it's the "Session Active" label)
- pfn_xrSessionEndDebugUtilsLabelRegionEXT(session);
+ // End the session/begun region started above
+ // (in this case it's the "Session Active" label)
+ pfnSessionEndDebugUtilsLabelRegionEXT(session);
- vkEndSession(session);
+ xrEndSession(session);
----------------------------------------
-In the above example, if an error occurred in the "// Do stuff 1" section,
- then your debug utils callback would contain the following data in its
- pname:sessionLabels array: [0] = individual_label with labelName =
- "WaitFrame" [1] = session_active_region_label with labelName = "Session
- active"
+In the above example, if an error occurred in the `// Do stuff 1` section,
+then your debug utils callback would contain the following data in its
+pname:sessionLabels array:
-However, if an error occurred in the "// Do stuff 2" section, then your
- debug utils callback would contain the following data in its
- pname:sessionLabels array: [0] = individual_label with labelName =
- "BeginFrame" [1] = session_frame_region_label with labelName = "Session
- Frame 123" [2] = session_active_region_label with labelName = "Session
- active"
+* `[0]` = `individual_label` with `labelName` = "WaitFrame"
+* `[1]` = `session_active_region_label` with `labelName` = "Session active"
+
+However, if an error occurred in the `// Do stuff 2` section, then your
+debug utils callback would contain the following data in its
+pname:sessionLabels array:
+
+* `[0]` = `individual_label` with `labelName` = "BeginFrame"
+* `[1]` = `session_frame_region_label` with `labelName` = "Session Frame
+ 123"
+* `[2]` = `session_active_region_label` with `labelName` = "Session active"
You'll notice that "WaitFrame" is no longer available as soon as the next
call to another function like flink:xrSessionBeginDebugUtilsLabelRegionEXT.
@@ -15350,14 +16030,15 @@ None
*Version History*
- * Revision 1, 2018-02-19 (Mark Young / Karl Schultz)
- ** Initial draft, based on +VK_EXT_debug_utils+.
- * Revision 2, 2018-11-16 (Mark Young)
- ** Clean up some language based on changes going into the Vulkan
- +VK_EXT_debug_utils+ extension by Peter Kraus (aka @krOoze).
- ** Added session labels
-
-
+* Revision 1, 2018-02-19 (Mark Young / Karl Schultz)
+** Initial draft, based on +VK_EXT_debug_utils+.
+* Revision 2, 2018-11-16 (Mark Young)
+** Clean up some language based on changes going into the Vulkan
+ +VK_EXT_debug_utils+ extension by Peter Kraus (aka @krOoze).
+** Added session labels
+* Revision 3, 2019-07-19 (Ryan Pavlik)
+** Update examples.
+** Improve formatting
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[XR_EXT_performance_settings]]
@@ -15372,7 +16053,7 @@ None
*Revision*::
1
*Extension and Version Dependencies*::
- * Requires OpenXR 0.90
+ * Requires OpenXR 1.0
*Last Modified Date*::
2017-11-30
@@ -15418,6 +16099,8 @@ a level elink:XrPerfSettingsLevelEXT for each of the XR-critical processing
domains elink:XrPerfSettingsDomainEXT (currently defined is a CPU and a GPU
domain):
+[open,refpage='XrPerfSettingsDomainEXT',type='enums',desc='XrPerfSettingsDomainEXT']
+--
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[XrPerfSettingsDomainEXT,XrPerfSettingsDomainEXT]]
[source,c++]
@@ -15428,7 +16111,10 @@ typedef enum XrPerfSettingsDomainEXT {
XR_PERF_SETTINGS_DOMAIN_MAX_ENUM_EXT = 0x7FFFFFFF
} XrPerfSettingsDomainEXT;
----
+--
+[open,refpage='XrPerfSettingsLevelEXT',type='enums',desc='XrPerfSettingsLevelEXT']
+--
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[XrPerfSettingsLevelEXT,XrPerfSettingsLevelEXT]]
[source,c++]
@@ -15441,6 +16127,7 @@ typedef enum XrPerfSettingsLevelEXT {
XR_PERF_SETTINGS_LEVEL_MAX_ENUM_EXT = 0x7FFFFFFF
} XrPerfSettingsLevelEXT;
----
+--
This extension defines platform-independent level hints:
@@ -15575,7 +16262,7 @@ of its mitigations.
----
typedef struct XrEventDataPerfSettingsEXT {
XrStructureType type;
- const void* XR_MAY_ALIAS next;
+ const void* next;
XrPerfSettingsDomainEXT domain;
XrPerfSettingsSubDomainEXT subDomain;
XrPerfSettingsNotificationLevelEXT fromLevel;
@@ -15741,6 +16428,8 @@ within thermal limits) have ended.​
'''
===== [big]#xrPerfSettingsSetPerformanceLevelEXT#
+[open,refpage='xrPerfSettingsSetPerformanceLevelEXT',type='protos',desc='xrPerfSettingsSetPerformanceLevelEXT',xrefs='']
+--
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[xrPerfSettingsSetPerformanceLevelEXT,xrPerfSettingsSetPerformanceLevelEXT]]
[source,c++]
@@ -15763,8 +16452,8 @@ XrResult xrPerfSettingsSetPerformanceLevelEXT(
****
* [[VUID-xrPerfSettingsSetPerformanceLevelEXT-extension-notenabled]] The `<<XR_EXT_performance_settings>>` extension must: be enabled prior to calling flink:xrPerfSettingsSetPerformanceLevelEXT
* [[VUID-xrPerfSettingsSetPerformanceLevelEXT-session-parameter]] pname:session must: be a valid slink:XrSession handle
-* [[VUID-xrPerfSettingsSetPerformanceLevelEXT-domain-parameter]] pname:domain must: be a valid slink:XrPerfSettingsDomainEXT value
-* [[VUID-xrPerfSettingsSetPerformanceLevelEXT-level-parameter]] pname:level must: be a valid slink:XrPerfSettingsLevelEXT value
+* [[VUID-xrPerfSettingsSetPerformanceLevelEXT-domain-parameter]] pname:domain must: be a valid elink:XrPerfSettingsDomainEXT value
+* [[VUID-xrPerfSettingsSetPerformanceLevelEXT-level-parameter]] pname:level must: be a valid elink:XrPerfSettingsLevelEXT value
****
.Return Codes
@@ -15780,6 +16469,7 @@ XrResult xrPerfSettingsSetPerformanceLevelEXT(
* ename:XR_ERROR_FUNCTION_UNSUPPORTED
****
+--
Refer to <<EXT_performance_settings-level-definition>> for the definition of
the level enumerations.
@@ -15787,13 +16477,15 @@ the level enumerations.
'''
===== [big]#XrEventDataPerformanceSettingsEXT#
+[open,refpage='XrEventDataPerfSettingsEXT',type='structs',desc='XrEventDataPerfSettingsEXT',xrefs='']
+--
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[XrEventDataPerfSettingsEXT,XrEventDataPerfSettingsEXT]]
[source,c++]
----
typedef struct XrEventDataPerfSettingsEXT {
XrStructureType type;
- const void* XR_MAY_ALIAS next;
+ const void* next;
XrPerfSettingsDomainEXT domain;
XrPerfSettingsSubDomainEXT subDomain;
XrPerfSettingsNotificationLevelEXT fromLevel;
@@ -15816,13 +16508,14 @@ typedef struct XrEventDataPerfSettingsEXT {
****
* [[VUID-XrEventDataPerfSettingsEXT-extension-notenabled]] The `<<XR_EXT_performance_settings>>` extension must: be enabled prior to using slink:XrEventDataPerfSettingsEXT
* [[VUID-XrEventDataPerfSettingsEXT-type-type]] pname:type must: be ename:XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT
-* [[VUID-XrEventDataPerfSettingsEXT-next-next]] pname:next must: be code:NULL
-* [[VUID-XrEventDataPerfSettingsEXT-domain-parameter]] pname:domain must: be a valid slink:XrPerfSettingsDomainEXT value
-* [[VUID-XrEventDataPerfSettingsEXT-subDomain-parameter]] pname:subDomain must: be a valid slink:XrPerfSettingsSubDomainEXT value
-* [[VUID-XrEventDataPerfSettingsEXT-fromLevel-parameter]] pname:fromLevel must: be a valid slink:XrPerfSettingsNotificationLevelEXT value
-* [[VUID-XrEventDataPerfSettingsEXT-toLevel-parameter]] pname:toLevel must: be a valid slink:XrPerfSettingsNotificationLevelEXT value
+* [[VUID-XrEventDataPerfSettingsEXT-next-next]] pname:next must: be code:NULL or a valid pointer to the <<valid-usage-for-structure-pointer-chains, next structure in a structure chain>>
+* [[VUID-XrEventDataPerfSettingsEXT-domain-parameter]] pname:domain must: be a valid elink:XrPerfSettingsDomainEXT value
+* [[VUID-XrEventDataPerfSettingsEXT-subDomain-parameter]] pname:subDomain must: be a valid elink:XrPerfSettingsSubDomainEXT value
+* [[VUID-XrEventDataPerfSettingsEXT-fromLevel-parameter]] pname:fromLevel must: be a valid elink:XrPerfSettingsNotificationLevelEXT value
+* [[VUID-XrEventDataPerfSettingsEXT-toLevel-parameter]] pname:toLevel must: be a valid elink:XrPerfSettingsNotificationLevelEXT value
****
+--
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
// Include this no-xref version without cross reference id for multiple includes of same file
@@ -15834,6 +16527,9 @@ typedef enum XrPerfSettingsDomainEXT {
XR_PERF_SETTINGS_DOMAIN_MAX_ENUM_EXT = 0x7FFFFFFF
} XrPerfSettingsDomainEXT;
----
+
+[open,refpage='XrPerfSettingsSubDomainEXT',type='enums',desc='XrPerfSettingsSubDomainEXT',xrefs='']
+--
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[XrPerfSettingsSubDomainEXT,XrPerfSettingsSubDomainEXT]]
[source,c++]
@@ -15845,6 +16541,10 @@ typedef enum XrPerfSettingsSubDomainEXT {
XR_PERF_SETTINGS_SUB_DOMAIN_MAX_ENUM_EXT = 0x7FFFFFFF
} XrPerfSettingsSubDomainEXT;
----
+--
+
+[open,refpage='XrPerfSettingsNotificationLevelEXT',type='enums',desc='XrPerfSettingsNotificationLevelEXT',xrefs='']
+--
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[XrPerfSettingsNotificationLevelEXT,XrPerfSettingsNotificationLevelEXT]]
[source,c++]
@@ -15856,6 +16556,7 @@ typedef enum XrPerfSettingsNotificationLevelEXT {
XR_PERF_SETTINGS_NOTIFICATION_LEVEL_MAX_ENUM_EXT = 0x7FFFFFFF
} XrPerfSettingsNotificationLevelEXT;
----
+--
*Version History*
@@ -15878,7 +16579,7 @@ typedef enum XrPerfSettingsNotificationLevelEXT {
*Revision*::
1
*Extension and Version Dependencies*::
- * Requires OpenXR 0.90
+ * Requires OpenXR 1.0
*Last Modified Date*::
2017-11-30
@@ -15958,6 +16659,8 @@ For the definition of the notification levels, see
===== [big]#xrThermalGetTemperatureTrendEXT#
+[open,refpage='xrThermalGetTemperatureTrendEXT',type='protos',desc='xrThermalGetTemperatureTrendEXT',xrefs='']
+--
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[xrThermalGetTemperatureTrendEXT,xrThermalGetTemperatureTrendEXT]]
[source,c++]
@@ -15989,8 +16692,8 @@ remaining headroom and the trend.
****
* [[VUID-xrThermalGetTemperatureTrendEXT-extension-notenabled]] The `<<XR_EXT_thermal_query>>` extension must: be enabled prior to calling flink:xrThermalGetTemperatureTrendEXT
* [[VUID-xrThermalGetTemperatureTrendEXT-session-parameter]] pname:session must: be a valid slink:XrSession handle
-* [[VUID-xrThermalGetTemperatureTrendEXT-domain-parameter]] pname:domain must: be a valid slink:XrPerfSettingsDomainEXT value
-* [[VUID-xrThermalGetTemperatureTrendEXT-notificationLevel-parameter]] pname:notificationLevel must: be a pointer to an slink:XrPerfSettingsNotificationLevelEXT value
+* [[VUID-xrThermalGetTemperatureTrendEXT-domain-parameter]] pname:domain must: be a valid elink:XrPerfSettingsDomainEXT value
+* [[VUID-xrThermalGetTemperatureTrendEXT-notificationLevel-parameter]] pname:notificationLevel must: be a pointer to an elink:XrPerfSettingsNotificationLevelEXT value
* [[VUID-xrThermalGetTemperatureTrendEXT-tempHeadroom-parameter]] pname:tempHeadroom must: be a pointer to a code:float value
* [[VUID-xrThermalGetTemperatureTrendEXT-tempSlope-parameter]] pname:tempSlope must: be a pointer to a code:float value
****
@@ -16008,6 +16711,7 @@ remaining headroom and the trend.
* ename:XR_ERROR_FUNCTION_UNSUPPORTED
****
+--
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
// Include this no-xref version without cross reference id for multiple includes of same file
@@ -16039,8 +16743,12 @@ typedef enum XrPerfSettingsNotificationLevelEXT {
+
+
:numbered!:
+// In non-PDF, use our custom index.
+// include::../generated/index.adoc[]
+
[[appendix]]
== Appendix
@@ -16116,7 +16824,7 @@ typedef enum XrStructureType {
XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING = 17,
XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED = 18,
XR_TYPE_ACTION_STATE_BOOLEAN = 23,
- XR_TYPE_ACTION_STATE_VECTOR1F = 24,
+ XR_TYPE_ACTION_STATE_FLOAT = 24,
XR_TYPE_ACTION_STATE_VECTOR2F = 25,
XR_TYPE_ACTION_STATE_POSE = 27,
XR_TYPE_ACTION_SET_CREATE_INFO = 28,
@@ -16127,9 +16835,10 @@ typedef enum XrStructureType {
XR_TYPE_COMPOSITION_LAYER_QUAD = 36,
XR_TYPE_REFERENCE_SPACE_CREATE_INFO = 37,
XR_TYPE_ACTION_SPACE_CREATE_INFO = 38,
- XR_TYPE_SPACE_RELATION = 39,
XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING = 40,
XR_TYPE_VIEW_CONFIGURATION_VIEW = 41,
+ XR_TYPE_SPACE_LOCATION = 42,
+ XR_TYPE_SPACE_VELOCITY = 43,
XR_TYPE_FRAME_STATE = 44,
XR_TYPE_VIEW_CONFIGURATION_PROPERTIES = 45,
XR_TYPE_FRAME_BEGIN_INFO = 46,
@@ -16137,11 +16846,16 @@ typedef enum XrStructureType {
XR_TYPE_EVENT_DATA_EVENTS_LOST = 49,
XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING = 51,
XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED = 52,
- XR_TYPE_INTERACTION_PROFILE_INFO = 53,
- XR_TYPE_ACTIVE_ACTION_SET = 54,
+ XR_TYPE_INTERACTION_PROFILE_STATE = 53,
XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO = 55,
XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO = 56,
XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO = 57,
+ XR_TYPE_ACTION_STATE_GET_INFO = 58,
+ XR_TYPE_HAPTIC_ACTION_INFO = 59,
+ XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO = 60,
+ XR_TYPE_ACTIONS_SYNC_INFO = 61,
+ XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO = 62,
+ XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO = 63,
XR_TYPE_COMPOSITION_LAYER_CUBE_KHR = 1000006000,
XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR = 1000008000,
XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR = 1000010000,
@@ -16165,9 +16879,6 @@ typedef enum XrStructureType {
XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR = 1000025000,
XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR = 1000025001,
XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR = 1000025002,
- XR_TYPE_GRAPHICS_BINDING_D3D10_KHR = 1000026000,
- XR_TYPE_SWAPCHAIN_IMAGE_D3D10_KHR = 1000026001,
- XR_TYPE_GRAPHICS_REQUIREMENTS_D3D10_KHR = 1000026002,
XR_TYPE_GRAPHICS_BINDING_D3D11_KHR = 1000027000,
XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR = 1000027001,
XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR = 1000027002,
@@ -16234,10 +16945,17 @@ typedef XrFlags64 XrSessionCreateFlags;
----
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
-[[XrSpaceRelationFlags,XrSpaceRelationFlags]]
+[[XrSpaceLocationFlags,XrSpaceLocationFlags]]
[source,c++]
----
-typedef XrFlags64 XrSpaceRelationFlags;
+typedef XrFlags64 XrSpaceLocationFlags;
+
+----
+// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
+[[XrSpaceVelocityFlags,XrSpaceVelocityFlags]]
+[source,c++]
+----
+typedef XrFlags64 XrSpaceVelocityFlags;
----
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
@@ -16279,7 +16997,11 @@ extern "C" {
and closed with:
[source,C]
-#ifdef __cplusplus } #endif
+----
+#ifdef __cplusplus
+}
+#endif
+----
The supplied `openxr.h` header defines a small number of C preprocessor
macros that are described below.
@@ -16293,14 +17015,14 @@ Each is packed into a 32-bit integer as described in
Macros>>.
-[open,refpage='XR_CURRENT_API_VERSION',type='defines',desc='Version of the OpenXR API',xrefs='XR_MAKE_VERSION XR_HEADER_VERSION']
+[open,refpage='XR_CURRENT_API_VERSION',type='defines',desc='Version of the OpenXR API',xrefs='XR_MAKE_VERSION']
--
// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
[[XR_CURRENT_API_VERSION,XR_CURRENT_API_VERSION]]
[source,c++]
----
// OpenXR current version number.
-#define XR_CURRENT_API_VERSION XR_MAKE_VERSION(0, 90, 1)
+#define XR_CURRENT_API_VERSION XR_MAKE_VERSION(1, 0, 0)
----
@@ -16308,29 +17030,10 @@ dlink:XR_CURRENT_API_VERSION is the current version of the OpenXR API.
--
-[open,refpage='XR_HEADER_VERSION',type='defines',desc='Version of the OpenXR header',xrefs='XR_MAKE_VERSION XR_CURRENT_API_VERSION']
---
-// WARNING: DO NOT MODIFY! This file is automatically generated from the xr.xml registry
-[[XR_HEADER_VERSION,XR_HEADER_VERSION]]
-[source,c++]
-----
-// Version of this file
-#define XR_HEADER_VERSION 43
-
-----
-
-dlink:XR_HEADER_VERSION is the version number of the `openxr.h` header.
-This value is currently kept synchronized with the release number of the
-Specification.
-However, it is not guaranteed to remain synchronized, since most
-Specification updates have no effect on `openxr.h`.
---
-
-
[[appendix-api-version-number-macros]]
===== API Version Number Function-like Macros
-API Version Numbers are three components, packed into a single 32-bit
+API Version Numbers are three components, packed into a single 64-bit
integer.
The following macros manipulate version components and packed version
numbers.
@@ -16343,18 +17046,20 @@ numbers.
[source,c++]
----
#define XR_MAKE_VERSION(major, minor, patch) \
- (((major) << 22) | ((minor) << 12) | (patch))
+ ((((major) & 0xffffULL) << 48) | (((minor) & 0xffffULL) << 32) | ((patch) & 0xffffffffULL))
----
.Parameter Descriptions
****
-* pname:major is the major version number.
-* pname:minor is the minor version number.
-* pname:patch is the patch version number.
+* pname:major is the major version number, packed into the most-significant
+ 16 bits.
+* pname:minor is the minor version number, packed into the
+ second-most-significant group of 16 bits.
+* pname:patch is the patch version number, in the least-significant 32 bits.
****
-dlink:XR_MAKE_VERSION constructs a packed 32-bit integer API version number
+dlink:XR_MAKE_VERSION constructs a packed 64-bit integer API version number
from three components.
The format used is described in <<api-version-numbers-and-semantics,API
Version Numbers and Semantics>>.
@@ -16371,7 +17076,7 @@ flink:xrCreateInstance.
[[XR_VERSION_MAJOR,XR_VERSION_MAJOR]]
[source,c++]
----
-#define XR_VERSION_MAJOR(version) ((uint32_t)(version) >> 22)
+#define XR_VERSION_MAJOR(version) (uint16_t)(((uint64_t)(version) >> 48)& 0xffffULL)
----
@@ -16392,7 +17097,7 @@ version number.
[[XR_VERSION_MINOR,XR_VERSION_MINOR]]
[source,c++]
----
-#define XR_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff)
+#define XR_VERSION_MINOR(version) (uint16_t)(((uint64_t)(version) >> 32) & 0xffffULL)
----
@@ -16413,7 +17118,7 @@ version number.
[[XR_VERSION_PATCH,XR_VERSION_PATCH]]
[source,c++]
----
-#define XR_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff)
+#define XR_VERSION_PATCH(version) (uint32_t)((uint64_t)(version) & 0xffffffffULL)
----
@@ -16585,7 +17290,6 @@ needed.
|[[XR_USE_GRAPHICS_API_OPENGL]] `XR_USE_GRAPHICS_API_OPENGL` |OpenGL
|[[XR_USE_GRAPHICS_API_OPENGL_ES]] `XR_USE_GRAPHICS_API_OPENGL_ES` |OpenGL ES
|[[XR_USE_GRAPHICS_API_VULKAN]] `XR_USE_GRAPHICS_API_VULKAN` |Vulkan
-|[[XR_USE_GRAPHICS_API_D3D10]] `XR_USE_GRAPHICS_API_D3D10` |Direct3D 10.x
|[[XR_USE_GRAPHICS_API_D3D11]] `XR_USE_GRAPHICS_API_D3D11` |Direct3D 11
|[[XR_USE_GRAPHICS_API_D3D12]] `XR_USE_GRAPHICS_API_D3D12` |Direct3D 12
|==========================================
@@ -16755,6 +17459,10 @@ excellence.
He was a mentor and teacher who inspired those who knew him and many
continue to benefit from his hard work and generosity.
+// Force page break here, workaround
+// see https://github.com/KhronosGroup/Vulkan-Docs/issues/459
+// and https://github.com/asciidoctor/asciidoctor-pdf/issues/38
+
JP was a rare gem; fantastically brilliant intellectually, but also warm,
compassionate, generous, humble, and funny.
Those of us lucky enough to have crossed paths with him knew what a
@@ -16771,13 +17479,14 @@ participating in the Khronos OpenXR Working Group.
Members of the Working Group, including the company that they represented at
the time of their most recent contribution, are listed below.
-==== Contributors to OpenXR 0.90 Provisional
+==== Contributors to OpenXR 1.0
* Adam Gousetis, Google
* Alex Turner, Microsoft
* Andreas Loeve Selvik, Arm
* Andres Rodriguez, Valve Software
* Armelle Laine, Qualcomm Technologies, Inc
+* Attila Maczak, CTRL-labs
* Blake Taylor, Magic Leap
* Brad Grantham, Google
* Brandon Jones, Google
@@ -16786,6 +17495,8 @@ the time of their most recent contribution, are listed below.
* Bryce Hutchings, Microsoft
* Cass Everitt, Facebook
* Charles Egenbacher, Epic Games
+* Chris Osborn, CTRL-labs
+* Christine Perey, Perey Research & Consulting
* Christoph Haag, Collabora
* Craig Donner, Google
* Dan Ginsburg, Valve Software
@@ -16838,15 +17549,20 @@ the time of their most recent contribution, are listed below.
* Robert Menzel, NVIDIA
* Robert Simpson, Qualcomm Technologies, Inc.
* Robin Bourianes, Starbreeze
-* Ryan Pavlik, Collabora
+* Ryan A. Pavlik, Collabora
* Ryan Vance, Epic Games
* Sam Martin, Arm
* Satish Salian, NVIDIA
* Scott Flynn, Unity Technologies
+* Sean Payne, CTRL-labs
* Sophia Baldonado, PlutoVR
+* Steve Smith, Epic Games
* Sungye Kim, Intel
* Tom Flynn, Samsung
* Trevor F. Smith, Mozilla
* Vivek Viswanathan, Dell
* Yin Li, Microsoft
* Yuval Boger, Sensics
+* Zheng Qin, Microsoft
+
+// In PDF, use the auto-generated index.
diff --git a/specification/registry/xr.xml b/specification/registry/xr.xml
index 080fbc93..54176080 100644
--- a/specification/registry/xr.xml
+++ b/specification/registry/xr.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
<registry>
<comment>
Copyright (c) 2017-2019 The Khronos Group Inc.
@@ -56,9 +56,9 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<tag name="QCOM" author="Qualcomm Technologies" contact="Armelle @alaine_qcom, Martin Renschler @martinr"/>
<tag name="STARBREEZE" author="Starbreeze" contact="David Srour @dsrour"/>
<tag name="VALVE" author="Valve" contact="Joe Ludwig @JoeLudwig"/>
+ <tag name="VARJO" author="Varjo" contact="Sergiy Dubovik @dubik, Rémi Arnaud @VarjoRemi"/>
</tags>
-
<!-- SECTION: OpenXR type definitions -->
<types>
<type name="openxr_platform_defines" category="include">#include "openxr_platform_defines.h"</type>
@@ -66,9 +66,6 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<type requires="android/native_window.h" name="ANativeWindow"/>
<type requires="jni.h" name="jobject"/>
<type requires="CL/cl_gl_ext.h" name="CGLContextObj"/>
- <type requires="D3D10.h" name="ID3D10Device"/>
- <type requires="D3D10.h" name="ID3D10Texture2D"/>
- <type requires="D3D10_1.h" name="D3D10_FEATURE_LEVEL1"/>
<type requires="d3dcommon.h" name="D3D_FEATURE_LEVEL"/>
<type requires="D3D11.h" name="ID3D11Device"/>
<type requires="D3D11.h" name="ID3D11Texture2D"/>
@@ -103,10 +100,10 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<type requires="time.h" name="timespec"/>
<type category="define">#define <name>XR_MAKE_VERSION</name>(major, minor, patch) \
- (((major) &lt;&lt; 22) | ((minor) &lt;&lt; 12) | (patch))</type>
- <type category="define">#define <name>XR_VERSION_MAJOR</name>(version) ((uint32_t)(version) &gt;&gt; 22)</type>
- <type category="define">#define <name>XR_VERSION_MINOR</name>(version) (((uint32_t)(version) &gt;&gt; 12) &amp; 0x3ff)</type>
- <type category="define">#define <name>XR_VERSION_PATCH</name>(version) ((uint32_t)(version) &amp; 0xfff)</type>
+ ((((major) &amp; 0xffffULL) &lt;&lt; 48) | (((minor) &amp; 0xffffULL) &lt;&lt; 32) | ((patch) &amp; 0xffffffffULL))</type>
+ <type category="define">#define <name>XR_VERSION_MAJOR</name>(version) (uint16_t)(((uint64_t)(version) &gt;&gt; 48)&amp; 0xffffULL)</type>
+ <type category="define">#define <name>XR_VERSION_MINOR</name>(version) (uint16_t)(((uint64_t)(version) &gt;&gt; 32) &amp; 0xffffULL)</type>
+ <type category="define">#define <name>XR_VERSION_PATCH</name>(version) (uint32_t)((uint64_t)(version) &amp; 0xffffffffULL)</type>
<!--
NOTE: The following group of lines defining the two version constants
@@ -114,9 +111,7 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
updates them automatically by processing a line at a time.
-->
<type category="define">// OpenXR current version number.
-#define <name>XR_CURRENT_API_VERSION</name> <type>XR_MAKE_VERSION</type>(0, 90, 1)</type>
- <type category="define">// Version of this file
-#define <name>XR_HEADER_VERSION</name> 43</type>
+#define <name>XR_CURRENT_API_VERSION</name> <type>XR_MAKE_VERSION</type>(1, 0, 0)</type>
<!--
NOTE: For avoidance of ambiguity, there should only be 1 <name> tag immediately in
@@ -194,12 +189,13 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<type category="basetype">typedef <type>uint64_t</type> <name>XrFlags64</name>;</type>
<type category="basetype">typedef <type>int64_t</type> <name>XrTime</name>;</type>
<type category="basetype">typedef <type>int64_t</type> <name>XrDuration</name>;</type>
+ <type category="basetype">typedef <type>uint64_t</type> <name>XrVersion</name>;</type>
<!-- Atoms, allocated by the runtime (if implementation requires) and never freed -->
<type category="basetype"><type>XR_DEFINE_ATOM</type>(<name>XrPath</name>)</type>
<type category="basetype"><type>XR_DEFINE_ATOM</type>(<name>XrSystemId</name>)</type>
- <!-- Basic C types, pulled in via openxr_platform.h -->
+ <!-- Basic C types, pulled in via openxr_platform_defines.h -->
<type requires="openxr_platform_defines" name="void"/>
<type requires="openxr_platform_defines" name="char"/>
<type requires="openxr_platform_defines" name="float"/>
@@ -213,13 +209,14 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<type requires="openxr_platform_defines" name="uintptr_t"/>
<!-- Bitmask types -->
- <type bitvalues="XrInstanceCreateFlagBits" category="bitmask">typedef <type>XrFlags64</type> <name>XrInstanceCreateFlags</name>;</type>
+ <type bitvalues="XrInstanceCreateFlagBits" category="bitmask">typedef <type>XrFlags64</type> <name>XrInstanceCreateFlags</name>;</type>
<type bitvalues="XrSessionCreateFlagBits" category="bitmask">typedef <type>XrFlags64</type> <name>XrSessionCreateFlags</name>;</type>
<type bitvalues="XrSwapchainCreateFlagBits" category="bitmask">typedef <type>XrFlags64</type> <name>XrSwapchainCreateFlags</name>;</type>
<type bitvalues="XrSwapchainUsageFlagBits" category="bitmask">typedef <type>XrFlags64</type> <name>XrSwapchainUsageFlags</name>;</type>
<type bitvalues="XrViewStateFlagBits" category="bitmask">typedef <type>XrFlags64</type> <name>XrViewStateFlags</name>;</type>
<type bitvalues="XrCompositionLayerFlagBits" category="bitmask">typedef <type>XrFlags64</type> <name>XrCompositionLayerFlags</name>;</type>
- <type bitvalues="XrSpaceRelationFlagBits" category="bitmask">typedef <type>XrFlags64</type> <name>XrSpaceRelationFlags</name>;</type>
+ <type bitvalues="XrSpaceLocationFlagBits" category="bitmask">typedef <type>XrFlags64</type> <name>XrSpaceLocationFlags</name>;</type>
+ <type bitvalues="XrSpaceVelocityFlagBits" category="bitmask">typedef <type>XrFlags64</type> <name>XrSpaceVelocityFlags</name>;</type>
<type bitvalues="XrInputSourceLocalizedNameFlagBits" category="bitmask">typedef <type>XrFlags64</type> <name>XrInputSourceLocalizedNameFlags</name>;</type>
<!-- Bitmask types for XR_EXT_debug_utils -->
@@ -230,10 +227,10 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<!-- 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" parent="XrInstance"><type>XR_DEFINE_HANDLE</type>(<name>XrSession</name>)</type>
+ <type category="handle" parent="XrInstance"><type>XR_DEFINE_HANDLE</type>(<name>XrActionSet</name>)</type>
+ <type category="handle" parent="XrActionSet"><type>XR_DEFINE_HANDLE</type>(<name>XrAction</name>)</type>
<type category="handle" parent="XrSession"><type>XR_DEFINE_HANDLE</type>(<name>XrSwapchain</name>)</type>
<type category="handle" parent="XrSession"><type>XR_DEFINE_HANDLE</type>(<name>XrSpace</name>)</type>
- <type category="handle" parent="XrSession"><type>XR_DEFINE_HANDLE</type>(<name>XrActionSet</name>)</type>
- <type category="handle" parent="XrActionSet"><type>XR_DEFINE_HANDLE</type>(<name>XrAction</name>)</type>
<type category="handle" parent="XrInstance"><type>XR_DEFINE_HANDLE</type>(<name>XrDebugUtilsMessengerEXT</name>)</type>
<!-- enums and flag bits generated from corresponding <enums> tags below -->
@@ -246,7 +243,8 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<type name="XrSwapchainUsageFlagBits" category="enum"/>
<type name="XrViewStateFlagBits" category="enum"/>
<type name="XrCompositionLayerFlagBits" category="enum"/>
- <type name="XrSpaceRelationFlagBits" category="enum"/>
+ <type name="XrSpaceLocationFlagBits" category="enum"/>
+ <type name="XrSpaceVelocityFlagBits" category="enum"/>
<type name="XrInputSourceLocalizedNameFlagBits" category="enum"/>
<type name="XrAndroidThreadTypeKHR" category="enum"/>
<type name="XrEyeVisibility" category="enum"/>
@@ -324,6 +322,12 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<member><type>XrOffset2Di</type> <name>offset</name></member>
<member><type>XrExtent2Di</type> <name>extent</name></member>
</type>
+
+ <comment>
+ XrBaseInStructure and XrBaseOutStructure use "struct" in their member definitions
+ because they are recursive structures and this is easier than modifying the tooling
+ to output forward declarations.
+ </comment>
<type category="struct" name="XrBaseInStructure" mayalias="true">
<member><type>XrStructureType</type> <name>type</name></member>
<member>const struct <type>XrBaseInStructure</type>* <name>next</name></member>
@@ -336,22 +340,22 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<member values="XR_TYPE_API_LAYER_PROPERTIES"><type>XrStructureType</type> <name>type</name></member>
<member><type>void</type>* <name>next</name></member>
<member><type>char</type> <name>layerName</name>[<enum>XR_MAX_API_LAYER_NAME_SIZE</enum>]</member>
- <member><type>uint32_t</type> <name>specVersion</name></member>
- <member><type>uint32_t</type> <name>implementationVersion</name></member>
+ <member><type>XrVersion</type> <name>specVersion</name></member>
+ <member><type>uint32_t</type> <name>layerVersion</name></member>
<member><type>char</type> <name>description</name>[<enum>XR_MAX_API_LAYER_DESCRIPTION_SIZE</enum>]</member>
</type>
<type category="struct" name="XrExtensionProperties" returnedonly="true">
<member values="XR_TYPE_EXTENSION_PROPERTIES"><type>XrStructureType</type> <name>type</name></member>
<member><type>void</type>* <name>next</name></member>
<member><type>char</type> <name>extensionName</name>[<enum>XR_MAX_EXTENSION_NAME_SIZE</enum>]</member>
- <member><type>uint32_t</type> <name>specVersion</name></member>
+ <member><type>uint32_t</type> <name>extensionVersion</name></member>
</type>
<type category="struct" name="XrApplicationInfo">
<member><type>char</type> <name>applicationName</name>[<enum>XR_MAX_APPLICATION_NAME_SIZE</enum>]</member>
<member><type>uint32_t</type> <name>applicationVersion</name></member>
<member><type>char</type> <name>engineName</name>[<enum>XR_MAX_ENGINE_NAME_SIZE</enum>]</member>
<member><type>uint32_t</type> <name>engineVersion</name></member>
- <member><type>uint32_t</type> <name>apiVersion</name></member>
+ <member><type>XrVersion</type> <name>apiVersion</name></member>
</type>
<type category="struct" name="XrInstanceCreateInfo">
<member values="XR_TYPE_INSTANCE_CREATE_INFO"><type>XrStructureType</type> <name>type</name></member>
@@ -366,12 +370,12 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<type category="struct" name="XrInstanceProperties" returnedonly="true">
<member values="XR_TYPE_INSTANCE_PROPERTIES"><type>XrStructureType</type> <name>type</name></member>
<member><type>void</type>* <name>next</name></member>
- <member><type>uint32_t</type> <name>runtimeVersion</name></member>
+ <member><type>XrVersion</type> <name>runtimeVersion</name></member>
<member><type>char</type> <name>runtimeName</name>[<enum>XR_MAX_RUNTIME_NAME_SIZE</enum>]</member>
</type>
<type category="struct" name="XrSystemGetInfo">
<member values="XR_TYPE_SYSTEM_GET_INFO"><type>XrStructureType</type> <name>type</name></member>
- <member><type>void</type>* <name>next</name></member>
+ <member>const <type>void</type>* <name>next</name></member>
<member><type>XrFormFactor</type> <name>formFactor</name></member>
</type>
<type category="struct" name="XrSystemProperties" returnedonly="true">
@@ -386,7 +390,6 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<type category="struct" name="XrSystemGraphicsProperties">
<member><type>uint32_t</type> <name>maxSwapchainImageHeight</name></member>
<member><type>uint32_t</type> <name>maxSwapchainImageWidth</name></member>
- <member><type>uint32_t</type> <name>maxViewCount</name></member>
<member><type>uint32_t</type> <name>maxLayerCount</name></member>
</type>
<type category="struct" name="XrSystemTrackingProperties">
@@ -412,7 +415,7 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<member values="XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR"><type>XrStructureType</type> <name>type</name></member>
<member>const <type>void</type>* <name>next</name></member>
<member><type>xcb_connection_t</type>* <name>connection</name></member>
- <member><type>uint32_t</type> <name>screen_number</name></member>
+ <member><type>uint32_t</type> <name>screenNumber</name></member>
<member><type>xcb_glx_fbconfig_t</type> <name>fbconfigid</name></member>
<member><type>xcb_visualid_t</type> <name>visualid</name></member>
<member><type>xcb_glx_drawable_t</type> <name>glxDrawable</name></member>
@@ -423,11 +426,6 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<member>const <type>void</type>* <name>next</name></member>
<member>struct <type>wl_display</type>* <name>display</name></member>
</type>
- <type category="struct" name="XrGraphicsBindingD3D10KHR" structextends="XrSessionCreateInfo">
- <member values="XR_TYPE_GRAPHICS_BINDING_D3D10_KHR"><type>XrStructureType</type> <name>type</name></member>
- <member>const <type>void</type>* <name>next</name></member>
- <member><type>ID3D10Device</type>* <name>device</name></member>
- </type>
<type category="struct" name="XrGraphicsBindingD3D11KHR" structextends="XrSessionCreateInfo">
<member values="XR_TYPE_GRAPHICS_BINDING_D3D11_KHR"><type>XrStructureType</type> <name>type</name></member>
<member>const <type>void</type>* <name>next</name></member>
@@ -470,7 +468,7 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<member values="XR_TYPE_SWAPCHAIN_CREATE_INFO"><type>XrStructureType</type> <name>type</name></member>
<member>const <type>void</type>* <name>next</name></member>
<member optional="true"><type>XrSwapchainCreateFlags</type> <name>createFlags</name></member>
- <member><type>XrSwapchainUsageFlags</type> <name>usageFlags</name></member>
+ <member optional="true"><type>XrSwapchainUsageFlags</type> <name>usageFlags</name></member>
<member><type>int64_t</type> <name>format</name></member>
<member><type>uint32_t</type> <name>sampleCount</name></member>
<member><type>uint32_t</type> <name>width</name></member>
@@ -498,11 +496,6 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<member><type>void</type>* <name>next</name></member>
<member><type>VkImage</type> <name>image</name></member>
</type>
- <type category="struct" name="XrSwapchainImageD3D10KHR" parentstruct="XrSwapchainImageBaseHeader">
- <member values="XR_TYPE_SWAPCHAIN_IMAGE_D3D10_KHR"> <type>XrStructureType</type> <name>type</name></member>
- <member><type>void</type>* <name>next</name></member>
- <member><type>ID3D10Texture2D</type>* <name>texture</name></member>
- </type>
<type category="struct" name="XrSwapchainImageD3D11KHR" parentstruct="XrSwapchainImageBaseHeader">
<member values="XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR"> <type>XrStructureType</type> <name>type</name></member>
<member><type>void</type>* <name>next</name></member>
@@ -535,19 +528,22 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<type category="struct" name="XrActionSpaceCreateInfo">
<member values="XR_TYPE_ACTION_SPACE_CREATE_INFO"><type>XrStructureType</type> <name>type</name></member>
<member>const <type>void</type>* <name>next</name></member>
+ <member><type>XrAction</type> <name>action</name></member>
<member optional="true"><type>XrPath</type> <name>subactionPath</name></member>
<member><type>XrPosef</type> <name>poseInActionSpace</name></member>
</type>
- <type category="struct" name="XrSpaceRelation">
- <member values="XR_TYPE_SPACE_RELATION"><type>XrStructureType</type> <name>type</name></member>
+ <type category="struct" name="XrSpaceLocation">
+ <member values="XR_TYPE_SPACE_LOCATION"><type>XrStructureType</type> <name>type</name></member>
<member><type>void</type>* <name>next</name></member>
- <member optional="true"><type>XrSpaceRelationFlags</type> <name>relationFlags</name></member>
- <member><type>XrTime</type> <name>time</name></member>
+ <member optional="true"><type>XrSpaceLocationFlags</type> <name>locationFlags</name></member>
<member><type>XrPosef</type> <name>pose</name></member>
+ </type>
+ <type category="struct" name="XrSpaceVelocity" structextends="XrSpaceLocation">
+ <member values="XR_TYPE_SPACE_VELOCITY"><type>XrStructureType</type> <name>type</name></member>
+ <member><type>void</type>* <name>next</name></member>
+ <member optional="true"><type>XrSpaceVelocityFlags</type> <name>velocityFlags</name></member>
<member><type>XrVector3f</type> <name>linearVelocity</name></member>
<member><type>XrVector3f</type> <name>angularVelocity</name></member>
- <member><type>XrVector3f</type> <name>linearAcceleration</name></member>
- <member><type>XrVector3f</type> <name>angularAcceleration</name></member>
</type>
<type category="struct" name="XrFovf">
<member><type>float</type> <name>angleLeft</name></member>
@@ -564,6 +560,7 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<type category="struct" name="XrViewLocateInfo">
<member values="XR_TYPE_VIEW_LOCATE_INFO"><type>XrStructureType</type> <name>type</name></member>
<member>const <type>void</type>* <name>next</name></member>
+ <member><type>XrViewConfigurationType</type> <name>viewConfigurationType</name></member>
<member><type>XrTime</type> <name>displayTime</name></member>
<member><type>XrSpace</type> <name>space</name></member>
</type>
@@ -616,7 +613,7 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<member><type>XrEyeVisibility</type> <name>eyeVisibility</name></member>
<member><type>XrSwapchainSubImage</type> <name>subImage</name></member>
<member><type>XrPosef</type> <name>pose</name></member>
- <member><type>XrVector2f</type> <name>size</name></member>
+ <member><type>XrExtent2Df</type> <name>size</name></member>
</type>
<type category="struct" name="XrCompositionLayerCylinderKHR" parentstruct="XrCompositionLayerBaseHeader">
<member values="XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR"><type>XrStructureType</type> <name>type</name></member>
@@ -639,7 +636,6 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<member><type>XrSwapchain</type> <name>swapchain</name></member>
<member><type>uint32_t</type> <name>imageArrayIndex</name></member>
<member><type>XrQuaternionf</type> <name>orientation</name></member>
- <member><type>XrVector3f</type> <name>offset</name></member>
</type>
<type category="struct" name="XrCompositionLayerEquirectKHR" parentstruct="XrCompositionLayerBaseHeader">
<member values="XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR"><type>XrStructureType</type> <name>type</name></member>
@@ -649,25 +645,19 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<member><type>XrEyeVisibility</type> <name>eyeVisibility</name></member>
<member><type>XrSwapchainSubImage</type> <name>subImage</name></member>
<member><type>XrPosef</type> <name>pose</name></member>
- <member><type>XrVector3f</type> <name>offset</name></member>
+ <member><type>float</type> <name>radius</name></member>
<member><type>XrVector2f</type> <name>scale</name></member>
<member><type>XrVector2f</type> <name>bias</name></member>
</type>
<type category="struct" name="XrCompositionLayerDepthInfoKHR" structextends="XrCompositionLayerProjectionView">
<member values="XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR"><type>XrStructureType</type> <name>type</name></member>
<member>const <type>void</type>* <name>next</name></member>
- <member><type>XrSwapchainSubImage</type> <name>subImage</name></member>
+ <member><type>XrSwapchainSubImage</type> <name>subImage</name></member>
<member><type>float</type> <name>minDepth</name></member>
<member><type>float</type> <name>maxDepth</name></member>
<member><type>float</type> <name>nearZ</name></member>
<member><type>float</type> <name>farZ</name></member>
</type>
- <type category="struct" name="XrCompositionLayerColorModulationInfoKHR" structextends="XrCompositionLayerBaseHeader">
- <member values="XR_TYPE_COMPOSITION_LAYER_COLOR_MODULATION_INFO_KHR"><type>XrStructureType</type> <name>type</name></member>
- <member>const <type>void</type>* <name>next</name></member>
- <member><type>XrColor4f</type> <name>colorScale</name></member>
- <member><type>XrColor4f</type> <name>colorOffset</name></member>
- </type>
<type category="struct" name="XrFrameBeginInfo">
<member values="XR_TYPE_FRAME_BEGIN_INFO"><type>XrStructureType</type> <name>type</name></member>
<member>const <type>void</type>* <name>next</name></member>
@@ -675,10 +665,10 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
</type>
<type category="struct" name="XrFrameEndInfo">
<member values="XR_TYPE_FRAME_END_INFO"><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>XrTime</type> <name>displayTime</name></member>
<member><type>XrEnvironmentBlendMode</type> <name>environmentBlendMode</name></member>
- <member optional="true"><type>uint32_t</type> <name>layerCount</name></member>
+ <member optional="true"><type>uint32_t</type> <name>layerCount</name></member>
<member optional="true" len="layerCount">const <type>XrCompositionLayerBaseHeader</type>* const* <name>layers</name></member>
</type>
<type category="struct" name="XrFrameWaitInfo">
@@ -690,6 +680,7 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<member><type>void</type>* <name>next</name></member>
<member><type>XrTime</type> <name>predictedDisplayTime</name></member>
<member><type>XrDuration</type> <name>predictedDisplayPeriod</name></member>
+ <member><type>XrBool32</type> <name>shouldRender</name></member>
</type>
<type category="struct" name="XrHapticBaseHeader">
<member><type>XrStructureType</type> <name>type</name></member>
@@ -731,6 +722,7 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<type category="struct" name="XrEventDataReferenceSpaceChangePending" parentstruct="XrEventDataBaseHeader">
<member values="XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING"><type>XrStructureType</type> <name>type</name></member>
<member>const <type>void</type>* <name>next</name></member>
+ <member><type>XrSession</type> <name>session</name></member>
<member><type>XrReferenceSpaceType</type> <name>referenceSpaceType</name></member>
<member><type>XrTime</type> <name>changeTime</name></member>
<member><type>XrBool32</type> <name>poseValid</name></member>
@@ -747,6 +739,7 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<type category="struct" name="XrEventDataVisibilityMaskChangedKHR" parentstruct="XrEventDataBaseHeader">
<member values="XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR"><type>XrStructureType</type> <name>type</name></member>
<member>const <type>void</type>* <name>next</name></member>
+ <member><type>XrSession</type> <name>session</name></member>
<member><type>XrViewConfigurationType</type> <name>viewConfigurationType</name></member>
<member><type>uint32_t</type> <name>viewIndex</name></member>
</type>
@@ -764,8 +757,8 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<member><type>XrTime</type> <name>lastChangeTime</name></member>
<member><type>XrBool32</type> <name>isActive</name></member>
</type>
- <type category="struct" name="XrActionStateVector1f">
- <member values="XR_TYPE_ACTION_STATE_VECTOR1F"><type>XrStructureType</type> <name>type</name></member>
+ <type category="struct" name="XrActionStateFloat">
+ <member values="XR_TYPE_ACTION_STATE_FLOAT"><type>XrStructureType</type> <name>type</name></member>
<member><type>void</type>* <name>next</name></member>
<member><type>float</type> <name>currentState</name></member>
<member><type>XrBool32</type> <name>changedSinceLastSync</name></member>
@@ -788,59 +781,99 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<member><type>XrBool32</type> <name>isActive</name></member>
</type>
+ <type category="struct" name="XrActionStateGetInfo">
+ <member values="XR_TYPE_ACTION_STATE_GET_INFO"><type>XrStructureType</type> <name>type</name></member>
+ <member>const <type>void</type>* <name>next</name></member>
+ <member><type>XrAction</type> <name>action</name></member>
+ <member optional="true"><type>XrPath</type> <name>subactionPath</name></member>
+ </type>
+
+ <type category="struct" name="XrHapticActionInfo">
+ <member values="XR_TYPE_HAPTIC_ACTION_INFO"><type>XrStructureType</type> <name>type</name></member>
+ <member>const <type>void</type>* <name>next</name></member>
+ <member><type>XrAction</type> <name>action</name></member>
+ <member optional="true"><type>XrPath</type> <name>subactionPath</name></member>
+ </type>
+
<type category="struct" name="XrActionSetCreateInfo">
<member values="XR_TYPE_ACTION_SET_CREATE_INFO"><type>XrStructureType</type> <name>type</name></member>
- <member>const <type>void</type>* <name>next</name></member>
- <member><type>char</type> <name>actionSetName</name>[<enum>XR_MAX_ACTION_SET_NAME_SIZE</enum>]</member>
- <member optional="true"><type>char</type> <name>localizedActionSetName</name>[<enum>XR_MAX_LOCALIZED_ACTION_SET_NAME_SIZE</enum>]</member>
- <member><type>uint32_t</type> <name>priority</name></member>
+ <member>const <type>void</type>* <name>next</name></member>
+ <member><type>char</type> <name>actionSetName</name>[<enum>XR_MAX_ACTION_SET_NAME_SIZE</enum>]</member>
+ <member><type>char</type> <name>localizedActionSetName</name>[<enum>XR_MAX_LOCALIZED_ACTION_SET_NAME_SIZE</enum>]</member>
+ <member><type>uint32_t</type> <name>priority</name></member>
</type>
<type category="struct" name="XrActionSuggestedBinding">
- <member><type>XrAction</type> <name>action</name></member>
- <member><type>XrPath</type> <name>binding</name></member>
+ <member><type>XrAction</type> <name>action</name></member>
+ <member><type>XrPath</type> <name>binding</name></member>
</type>
<type category="struct" name="XrInteractionProfileSuggestedBinding">
<member values="XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING"><type>XrStructureType</type> <name>type</name></member>
- <member>const <type>void</type>* <name>next</name></member>
- <member><type>XrPath</type> <name>interactionProfile</name></member>
- <member><type>uint32_t</type> <name>countSuggestedBindings</name></member>
- <member len="countSuggestedBindings">const <type>XrActionSuggestedBinding</type>* <name>suggestedBindings</name></member>
+ <member>const <type>void</type>* <name>next</name></member>
+ <member><type>XrPath</type> <name>interactionProfile</name></member>
+ <member><type>uint32_t</type> <name>countSuggestedBindings</name></member>
+ <member len="countSuggestedBindings">const <type>XrActionSuggestedBinding</type>* <name>suggestedBindings</name></member>
</type>
<type category="struct" name="XrActiveActionSet">
- <member values="XR_TYPE_ACTIVE_ACTION_SET"><type>XrStructureType</type> <name>type</name></member>
- <member>const <type>void</type>* <name>next</name></member>
- <member><type>XrActionSet</type> <name>actionSet</name></member>
- <member><type>XrPath</type> <name>subactionPath</name></member>
+ <member><type>XrActionSet</type> <name>actionSet</name></member>
+ <member><type>XrPath</type> <name>subactionPath</name></member>
+ </type>
+
+ <type category="struct" name="XrSessionActionSetsAttachInfo">
+ <member values="XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO"><type>XrStructureType</type> <name>type</name></member>
+ <member>const <type>void</type>* <name>next</name></member>
+ <member><type>uint32_t</type> <name>countActionSets</name></member>
+ <member len="countActionSets">const <type>XrActionSet</type>* <name>actionSets</name></member>
+ </type>
+
+ <type category="struct" name="XrActionsSyncInfo">
+ <member values="XR_TYPE_ACTIONS_SYNC_INFO"><type>XrStructureType</type> <name>type</name></member>
+ <member>const <type>void</type>* <name>next</name></member>
+ <member optional="true"><type>uint32_t</type> <name>countActiveActionSets</name></member>
+ <member optional="true" len="countActiveActionSets">const <type>XrActiveActionSet</type>* <name>activeActionSets</name></member>
+ </type>
+
+ <type category="struct" name="XrBoundSourcesForActionEnumerateInfo">
+ <member values="XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO"><type>XrStructureType</type> <name>type</name></member>
+ <member>const <type>void</type>* <name>next</name></member>
+ <member><type>XrAction</type> <name>action</name></member>
+ </type>
+
+ <type category="struct" name="XrInputSourceLocalizedNameGetInfo">
+ <member values="XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO"><type>XrStructureType</type> <name>type</name></member>
+ <member>const <type>void</type>* <name>next</name></member>
+ <member><type>XrPath</type> <name>sourcePath</name></member>
+ <member><type>XrInputSourceLocalizedNameFlags</type> <name>whichComponents</name></member>
</type>
<type category="struct" name="XrEventDataInteractionProfileChanged" parentstruct="XrEventDataBaseHeader">
<member values="XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED"><type>XrStructureType</type> <name>type</name></member>
<member>const <type>void</type>* <name>next</name></member>
+ <member><type>XrSession</type> <name>session</name></member>
</type>
- <type category="struct" name="XrInteractionProfileInfo">
- <member values="XR_TYPE_INTERACTION_PROFILE_INFO"><type>XrStructureType</type> <name>type</name></member>
- <member>const <type>void</type>* <name>next</name></member>
+ <type category="struct" name="XrInteractionProfileState">
+ <member values="XR_TYPE_INTERACTION_PROFILE_STATE"><type>XrStructureType</type> <name>type</name></member>
+ <member><type>void</type>* <name>next</name></member>
<member><type>XrPath</type> <name>interactionProfile</name></member>
</type>
<type category="struct" name="XrActionCreateInfo">
<member values="XR_TYPE_ACTION_CREATE_INFO"><type>XrStructureType</type> <name>type</name></member>
- <member>const <type>void</type>* <name>next</name></member>
- <member><type>char</type> <name>actionName</name>[<enum>XR_MAX_ACTION_NAME_SIZE</enum>]</member>
- <member><type>XrActionType</type> <name>actionType</name></member>
- <member optional="true"><type>uint32_t</type> <name>countSubactionPaths</name></member>
+ <member>const <type>void</type>* <name>next</name></member>
+ <member><type>char</type> <name>actionName</name>[<enum>XR_MAX_ACTION_NAME_SIZE</enum>]</member>
+ <member><type>XrActionType</type> <name>actionType</name></member>
+ <member optional="true"><type>uint32_t</type> <name>countSubactionPaths</name></member>
<member len="countSubactionPaths" optional="true">const <type>XrPath</type>* <name>subactionPaths</name></member>
- <member><type>char</type> <name>localizedActionName</name>[<enum>XR_MAX_LOCALIZED_ACTION_NAME_SIZE</enum>]</member>
+ <member><type>char</type> <name>localizedActionName</name>[<enum>XR_MAX_LOCALIZED_ACTION_NAME_SIZE</enum>]</member>
</type>
<type category="struct" name="XrInstanceCreateInfoAndroidKHR" structextends="XrInstanceCreateInfo">
<member values="XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR"><type>XrStructureType</type> <name>type</name></member>
- <member>const <type>void</type>* <name>next</name></member>
- <member><type>void</type>* <name>applicationVM</name></member>
- <member><type>void</type>* <name>applicationActivity</name></member>
+ <member>const <type>void</type>* <name>next</name></member>
+ <member><type>void</type>* <name>applicationVM</name></member>
+ <member><type>void</type>* <name>applicationActivity</name></member>
</type>
<type category="struct" name="XrVulkanSwapchainFormatListCreateInfoKHR">
<member values="XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR"><type>XrStructureType</type> <name>type</name></member>
@@ -884,35 +917,31 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<type category="struct" name="XrVisibilityMaskKHR">
<member values="XR_TYPE_VISIBILITY_MASK_KHR"><type>XrStructureType</type> <name>type</name></member>
<member><type>void</type>* <name>next</name></member>
- <member><type>uint32_t</type> <name>vertexCount</name></member>
- <member><type>XrVector2f</type>* <name>vertices</name></member>
- <member><type>uint32_t</type> <name>indexCount</name></member>
- <member><type>uint32_t</type>* <name>indices</name></member>
+ <member optional="true"><type>uint32_t</type> <name>vertexCapacityInput</name></member>
+ <member optional="true"><type>uint32_t</type> <name>vertexCountOutput</name></member>
+ <member optional="true" len="vertexCapacityInput"><type>XrVector2f</type>* <name>vertices</name></member>
+ <member optional="true"><type>uint32_t</type> <name>indexCapacityInput</name></member>
+ <member optional="true"><type>uint32_t</type> <name>indexCountOutput</name></member>
+ <member optional="true" len="indexCapacityInput"><type>uint32_t</type>* <name>indices</name></member>
</type>
<type category="struct" name="XrGraphicsRequirementsOpenGLKHR">
<member values="XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR"><type>XrStructureType</type> <name>type</name></member>
- <member><type>void</type>* <name>next</name></member>
- <member><type>uint32_t</type> <name>minApiVersionSupported</name></member>
- <member><type>uint32_t</type> <name>maxApiVersionSupported</name></member>
+ <member><type>void</type>* <name>next</name></member>
+ <member><type>XrVersion</type> <name>minApiVersionSupported</name></member>
+ <member><type>XrVersion</type> <name>maxApiVersionSupported</name></member>
</type>
<type category="struct" name="XrGraphicsRequirementsOpenGLESKHR">
<member values="XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR"><type>XrStructureType</type> <name>type</name></member>
<member><type>void</type>* <name>next</name></member>
- <member><type>uint32_t</type> <name>minApiVersionSupported</name></member>
- <member><type>uint32_t</type> <name>maxApiVersionSupported</name></member>
+ <member><type>XrVersion</type> <name>minApiVersionSupported</name></member>
+ <member><type>XrVersion</type> <name>maxApiVersionSupported</name></member>
</type>
<type category="struct" name="XrGraphicsRequirementsVulkanKHR">
<member values="XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR"><type>XrStructureType</type> <name>type</name></member>
- <member><type>void</type>* <name>next</name></member>
- <member><type>uint32_t</type> <name>minApiVersionSupported</name></member>
- <member><type>uint32_t</type> <name>maxApiVersionSupported</name></member>
- </type>
- <type category="struct" name="XrGraphicsRequirementsD3D10KHR">
- <member values="XR_TYPE_GRAPHICS_REQUIREMENTS_D3D10_KHR"><type>XrStructureType</type> <name>type</name></member>
- <member><type>void</type>* <name>next</name></member>
- <member><type>LUID</type> <name>adapterLuid</name></member>
- <member><type>D3D10_FEATURE_LEVEL1</type> <name>minFeatureLevel</name></member>
+ <member><type>void</type>* <name>next</name></member>
+ <member><type>XrVersion</type> <name>minApiVersionSupported</name></member>
+ <member><type>XrVersion</type> <name>maxApiVersionSupported</name></member>
</type>
<type category="struct" name="XrGraphicsRequirementsD3D11KHR">
<member values="XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR"><type>XrStructureType</type> <name>type</name></member>
@@ -989,7 +1018,7 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<enum value="17" name="XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING"/>
<enum value="18" name="XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED"/>
<enum value="23" name="XR_TYPE_ACTION_STATE_BOOLEAN"/>
- <enum value="24" name="XR_TYPE_ACTION_STATE_VECTOR1F"/>
+ <enum value="24" name="XR_TYPE_ACTION_STATE_FLOAT"/>
<enum value="25" name="XR_TYPE_ACTION_STATE_VECTOR2F"/>
<enum value="27" name="XR_TYPE_ACTION_STATE_POSE"/>
<enum value="28" name="XR_TYPE_ACTION_SET_CREATE_INFO"/>
@@ -1000,9 +1029,10 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<enum value="36" name="XR_TYPE_COMPOSITION_LAYER_QUAD"/>
<enum value="37" name="XR_TYPE_REFERENCE_SPACE_CREATE_INFO"/>
<enum value="38" name="XR_TYPE_ACTION_SPACE_CREATE_INFO"/>
- <enum value="39" name="XR_TYPE_SPACE_RELATION"/>
<enum value="40" name="XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING"/>
<enum value="41" name="XR_TYPE_VIEW_CONFIGURATION_VIEW"/>
+ <enum value="42" name="XR_TYPE_SPACE_LOCATION"/>
+ <enum value="43" name="XR_TYPE_SPACE_VELOCITY"/>
<enum value="44" name="XR_TYPE_FRAME_STATE"/>
<enum value="45" name="XR_TYPE_VIEW_CONFIGURATION_PROPERTIES"/>
<enum value="46" name="XR_TYPE_FRAME_BEGIN_INFO"/>
@@ -1010,21 +1040,23 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<enum value="49" name="XR_TYPE_EVENT_DATA_EVENTS_LOST"/>
<enum value="51" name="XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING"/>
<enum value="52" name="XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED"/>
- <enum value="53" name="XR_TYPE_INTERACTION_PROFILE_INFO"/>
- <enum value="54" name="XR_TYPE_ACTIVE_ACTION_SET"/>
+ <enum value="53" name="XR_TYPE_INTERACTION_PROFILE_STATE"/>
<enum value="55" name="XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO"/>
<enum value="56" name="XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO"/>
<enum value="57" name="XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO"/>
+ <enum value="58" name="XR_TYPE_ACTION_STATE_GET_INFO"/>
+ <enum value="59" name="XR_TYPE_HAPTIC_ACTION_INFO"/>
+ <enum value="60" name="XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO"/>
+ <enum value="61" name="XR_TYPE_ACTIONS_SYNC_INFO"/>
+ <enum value="62" name="XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO"/>
+ <enum value="63" name="XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO"/>
</enums>
<enums name="XrResult" type="enum" comment="Error and return codes">
<!-- Return codes for successful operation execution (positive values) -->
- <enum value="0" name="XR_SUCCESS" comment="Command completed successfully."/>
+ <enum value="0" name="XR_SUCCESS" comment="Function successfully completed."/>
<enum value="1" name="XR_TIMEOUT_EXPIRED" comment="The specified timeout time occurred before the operation could complete."/>
- <enum value="2" name="XR_SESSION_VISIBILITY_UNAVAILABLE" comment="The session has started but cannot be made visible at the moment."/>
<enum value="3" name="XR_SESSION_LOSS_PENDING" comment="The session will be lost soon."/>
<enum value="4" name="XR_EVENT_UNAVAILABLE" comment="No event was available."/>
- <enum value="5" name="XR_STATE_UNAVAILABLE" comment="No state (of any type) is available for the provided handle."/>
- <enum value="6" name="XR_STATE_TYPE_UNAVAILABLE" comment="The state of the given type is not available for the provided handle."/>
<enum value="7" name="XR_SPACE_BOUNDS_UNAVAILABLE" comment="The space's bounds are not known at the moment."/>
<enum value="8" name="XR_SESSION_NOT_FOCUSED" comment="The session is not in the focused state."/>
<enum value="9" name="XR_FRAME_DISCARDED" comment="A frame has been discarded from composition."/>
@@ -1032,31 +1064,35 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<enum value="-1" name="XR_ERROR_VALIDATION_FAILURE" comment="The function usage was invalid in some way."/>
<enum value="-2" name="XR_ERROR_RUNTIME_FAILURE" comment="The runtime failed to handle the function in an unexpected way that is not covered by another error result. "/>
<enum value="-3" name="XR_ERROR_OUT_OF_MEMORY" comment="A memory allocation has failed."/>
- <enum value="-4" name="XR_ERROR_RUNTIME_VERSION_INCOMPATIBLE" comment="The runtime version is incompatible with the requested or required version."/>
- <enum value="-5" name="XR_ERROR_DRIVER_INCOMPATIBLE" comment="The driver is incompatible with the runtime."/>
+ <enum value="-4" name="XR_ERROR_API_VERSION_UNSUPPORTED" comment="The runtime does not support the requested API version."/>
<enum value="-6" name="XR_ERROR_INITIALIZATION_FAILED" comment="Initialization of object could not be completed."/>
<enum value="-7" name="XR_ERROR_FUNCTION_UNSUPPORTED" comment="The requested function was not found or is otherwise unsupported."/>
+ <enum value="-8" name="XR_ERROR_FEATURE_UNSUPPORTED" comment="The requested feature is not supported."/>
<enum value="-9" name="XR_ERROR_EXTENSION_NOT_PRESENT" comment="A requested extension is not supported."/>
<enum value="-10" name="XR_ERROR_LIMIT_REACHED" comment="The runtime supports no more of the requested resource."/>
<enum value="-11" name="XR_ERROR_SIZE_INSUFFICIENT" comment="The supplied size was smaller than required."/>
- <enum value="-12" name="XR_ERROR_HANDLE_INVALID" comment="A supplied object was invalid."/>
- <enum value="-13" name="XR_ERROR_INSTANCE_LOST" comment="The XrInstance was lost or could not be found. It will need to be destroyed and optionally recreated."/>
- <enum value="-14" name="XR_ERROR_SESSION_RUNNING" comment="This session is already running."/>
- <enum value="-16" name="XR_ERROR_SESSION_NOT_RUNNING" comment="The operation requires this session to be in the running state."/>
- <enum value="-17" name="XR_ERROR_SESSION_LOST" comment="The XrSession was lost. It will need to be destroyed and optionally recreated."/>
- <enum value="-18" name="XR_ERROR_SYSTEM_INVALID" comment="The provided XrSystemId was invalid."/>
- <enum value="-19" name="XR_ERROR_PATH_INVALID" comment="The provided XrPath was not valid."/>
+ <enum value="-12" name="XR_ERROR_HANDLE_INVALID" comment="A supplied object handle was invalid."/>
+ <enum value="-13" name="XR_ERROR_INSTANCE_LOST" comment="The slink:XrInstance was lost or could not be found. It will need to be destroyed and optionally recreated."/>
+ <enum value="-14" name="XR_ERROR_SESSION_RUNNING" comment="The session &lt;&lt;session_running, is already running&gt;&gt;."/>
+ <enum value="-16" name="XR_ERROR_SESSION_NOT_RUNNING" comment="The session &lt;&lt;session_not_running, is not yet running&gt;&gt;."/>
+ <enum value="-17" name="XR_ERROR_SESSION_LOST" comment="The slink:XrSession was lost. It will need to be destroyed and optionally recreated."/>
+ <enum value="-18" name="XR_ERROR_SYSTEM_INVALID" comment="The provided basetype:XrSystemId was invalid."/>
+ <enum value="-19" name="XR_ERROR_PATH_INVALID" comment="The provided basetype:XrPath was not valid."/>
<enum value="-20" name="XR_ERROR_PATH_COUNT_EXCEEDED" comment="The maximum number of supported semantic paths has been reached."/>
<enum value="-21" name="XR_ERROR_PATH_FORMAT_INVALID" comment="The semantic path character format is invalid."/>
- <enum value="-22" name="XR_ERROR_LAYER_INVALID" comment="The layer was NULL or otherwise invalid."/>
- <enum value="-23" name="XR_ERROR_LAYER_LIMIT_EXCEEDED" comment="The number of specified layers is greater than the supported number."/>
+ <enum value="-22" name="XR_ERROR_PATH_UNSUPPORTED" comment="The semantic path is unsupported." />
+ <enum value="-23" name="XR_ERROR_LAYER_INVALID" comment="The layer was NULL or otherwise invalid."/>
+ <enum value="-24" name="XR_ERROR_LAYER_LIMIT_EXCEEDED" comment="The number of specified layers is greater than the supported number."/>
<enum value="-25" name="XR_ERROR_SWAPCHAIN_RECT_INVALID" comment="The image rect was negatively sized or otherwise invalid."/>
- <enum value="-26" name="XR_ERROR_SWAPCHAIN_FORMAT_UNSUPPORTED" comment="The image format isn't supported by the runtime or platform."/>
+ <enum value="-26" name="XR_ERROR_SWAPCHAIN_FORMAT_UNSUPPORTED" comment="The image format is not supported by the runtime or platform."/>
<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="-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="-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="-33" name="XR_ERROR_FILE_CONTENTS_INVALID" comment="The file's contents were invalid."/>
- <enum value="-34" name="XR_ERROR_FORM_FACTOR_UNSUPPORTED" comment="The specified form factor isn't supported by the current runtime or platform."/>
+ <enum value="-34" name="XR_ERROR_FORM_FACTOR_UNSUPPORTED" comment="The specified form factor is not supported by the current runtime or platform."/>
<enum value="-35" name="XR_ERROR_FORM_FACTOR_UNAVAILABLE" comment="The specified form factor is supported, but the device is currently not available, e.g. not plugged in or powered off."/>
<enum value="-36" name="XR_ERROR_API_LAYER_NOT_PRESENT" comment="A requested API layer is not present or could not be loaded."/>
<enum value="-37" name="XR_ERROR_CALL_ORDER_INVALID" comment="The call was made without having made a previously required call."/>
@@ -1065,9 +1101,12 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<enum value="-40" name="XR_ERROR_INDEX_OUT_OF_RANGE" comment="The supplied index was outside the range of valid indices."/>
<enum value="-41" name="XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED" comment="The specified view configuration type is not supported by the runtime or platform."/>
<enum value="-42" name="XR_ERROR_ENVIRONMENT_BLEND_MODE_UNSUPPORTED" comment="The specified environment blend mode is not supported by the runtime or platform."/>
- <enum value="-43" name="XR_ERROR_BINDINGS_DUPLICATED" comment="The application specified bindings for an input form factor it had already suggested bindings for."/>
<enum value="-44" name="XR_ERROR_NAME_DUPLICATED" comment="The name provided was a duplicate of an already-existing resource."/>
<enum value="-45" name="XR_ERROR_NAME_INVALID" comment="The name provided was invalid."/>
+ <enum value="-46" name="XR_ERROR_ACTIONSET_NOT_ATTACHED" comment="A referenced action set is not attached to the session."/>
+ <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="-49" name="XR_ERROR_LOCALIZED_NAME_INVALID" comment="The localized name provided was invalid."/>
<unused start="-100"/>
</enums>
<enums name="XrObjectType" type="enum" comment="Enums to track objects of various types">
@@ -1091,11 +1130,11 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<enum value="2" name="XR_EYE_VISIBILITY_RIGHT" comment="Display in the right eye only."/>
</enums>
<enums name="XrActionType" type="enum">
- <enum value="1" name="XR_INPUT_ACTION_TYPE_BOOLEAN"/>
- <enum value="2" name="XR_INPUT_ACTION_TYPE_VECTOR1F"/>
- <enum value="3" name="XR_INPUT_ACTION_TYPE_VECTOR2F"/>
- <enum value="4" name="XR_INPUT_ACTION_TYPE_POSE"/>
- <enum value="100" name="XR_OUTPUT_ACTION_TYPE_VIBRATION"/>
+ <enum value="1" name="XR_ACTION_TYPE_BOOLEAN_INPUT"/>
+ <enum value="2" name="XR_ACTION_TYPE_FLOAT_INPUT"/>
+ <enum value="3" name="XR_ACTION_TYPE_VECTOR2F_INPUT"/>
+ <enum value="4" name="XR_ACTION_TYPE_POSE_INPUT"/>
+ <enum value="100" name="XR_ACTION_TYPE_VIBRATION_OUTPUT"/>
</enums>
<enums name="XrReferenceSpaceType" type="enum">
<enum value="1" name="XR_REFERENCE_SPACE_TYPE_VIEW"/>
@@ -1119,7 +1158,7 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<enum value="0" name="XR_SESSION_STATE_UNKNOWN"/>
<enum value="1" name="XR_SESSION_STATE_IDLE"/>
<enum value="2" name="XR_SESSION_STATE_READY"/>
- <enum value="3" name="XR_SESSION_STATE_RUNNING"/>
+ <enum value="3" name="XR_SESSION_STATE_SYNCHRONIZED"/>
<enum value="4" name="XR_SESSION_STATE_VISIBLE"/>
<enum value="5" name="XR_SESSION_STATE_FOCUSED"/>
<enum value="6" name="XR_SESSION_STATE_STOPPING"/>
@@ -1204,16 +1243,18 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<enums name="XrCompositionLayerFlagBits" type="bitmask">
<enum bitpos="0" name="XR_COMPOSITION_LAYER_CORRECT_CHROMATIC_ABERRATION_BIT" comment="Enables chromatic aberration correction when not done by default."/>
<enum bitpos="1" name="XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT" comment="Enables the layer texture alpha channel."/>
+ <enum bitpos="2" name="XR_COMPOSITION_LAYER_UNPREMULTIPLIED_ALPHA_BIT" comment="Indicates the texture color channels have not been premultiplied by the texture alpha channel."/>
</enums>
- <enums name="XrSpaceRelationFlagBits" type="bitmask">
- <enum bitpos="0" name="XR_SPACE_RELATION_ORIENTATION_VALID_BIT" comment="Indicates validity of orientation member"/>
- <enum bitpos="1" name="XR_SPACE_RELATION_POSITION_VALID_BIT" comment="Indicates validity of position member"/>
- <enum bitpos="2" name="XR_SPACE_RELATION_LINEAR_VELOCITY_VALID_BIT" comment="Indicates validity of linearVelocity member"/>
- <enum bitpos="3" name="XR_SPACE_RELATION_ANGULAR_VELOCITY_VALID_BIT" comment="Indicates validity of angularVelocity member"/>
- <enum bitpos="4" name="XR_SPACE_RELATION_LINEAR_ACCELERATION_VALID_BIT" comment="Indicates validity of linearAcceleration member"/>
- <enum bitpos="5" name="XR_SPACE_RELATION_ANGULAR_ACCELERATION_VALID_BIT" comment="Indicates validity of angularAcceleration member"/>
- <enum bitpos="6" name="XR_SPACE_RELATION_ORIENTATION_TRACKED_BIT" comment="Indicates whether pose member contains an actively tracked orientation"/>
- <enum bitpos="7" name="XR_SPACE_RELATION_POSITION_TRACKED_BIT" comment="Indicates whether pose member contains an actively tracked position"/>
+
+ <enums name="XrSpaceLocationFlagBits" type="bitmask">
+ <enum bitpos="0" name="XR_SPACE_LOCATION_ORIENTATION_VALID_BIT" comment="Indicates validity of orientation member"/>
+ <enum bitpos="1" name="XR_SPACE_LOCATION_POSITION_VALID_BIT" comment="Indicates validity of position member"/>
+ <enum bitpos="2" name="XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT" comment="Indicates whether pose member contains an actively tracked orientation"/>
+ <enum bitpos="3" name="XR_SPACE_LOCATION_POSITION_TRACKED_BIT" comment="Indicates whether pose member contains an actively tracked position"/>
+ </enums>
+ <enums name="XrSpaceVelocityFlagBits" type="bitmask">
+ <enum bitpos="0" name="XR_SPACE_VELOCITY_LINEAR_VALID_BIT" comment="Indicates validity of linearVelocity member"/>
+ <enum bitpos="1" name="XR_SPACE_VELOCITY_ANGULAR_VALID_BIT" comment="Indicates validity of angularVelocity member"/>
</enums>
<enums name="XrInputSourceLocalizedNameFlagBits" type="bitmask">
@@ -1233,6 +1274,7 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<enum bitpos="0" name="XR_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT" comment="Indicates this is a general message"/>
<enum bitpos="1" name="XR_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT" comment="Indicates the message is related to a validation message"/>
<enum bitpos="2" name="XR_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT" comment="Indicates the message is related to a potential performance situation"/>
+ <enum bitpos="3" name="XR_DEBUG_UTILS_MESSAGE_TYPE_CONFORMANCE_BIT_EXT" comment="Indicates the message is related to a non-conformant runtime result"/>
</enums>
<!-- SECTION: OpenXR command definitions -->
@@ -1246,24 +1288,24 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_OUT_OF_MEMORY,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_SIZE_INSUFFICIENT">
<proto><type>XrResult</type> <name>xrEnumerateApiLayerProperties</name></proto>
<param optional="true"><type>uint32_t</type> <name>propertyCapacityInput</name></param>
- <param optional="true"><type>uint32_t</type>* <name>propertyCountOutput</name></param>
+ <param><type>uint32_t</type>* <name>propertyCountOutput</name></param>
<param optional="true" len="propertyCapacityInput"><type>XrApiLayerProperties</type>* <name>properties</name></param>
</command>
<command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_OUT_OF_MEMORY,XR_ERROR_API_LAYER_NOT_PRESENT,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_SIZE_INSUFFICIENT">
<proto><type>XrResult</type> <name>xrEnumerateInstanceExtensionProperties</name></proto>
<param optional="true" len="null-terminated">const <type>char</type>* <name>layerName</name></param>
<param optional="true"><type>uint32_t</type> <name>propertyCapacityInput</name></param>
- <param optional="true"><type>uint32_t</type>* <name>propertyCountOutput</name></param>
+ <param><type>uint32_t</type>* <name>propertyCountOutput</name></param>
<param optional="true" len="propertyCapacityInput"><type>XrExtensionProperties</type>* <name>properties</name></param>
</command>
- <command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_OUT_OF_MEMORY,XR_ERROR_LIMIT_REACHED,XR_ERROR_INSTANCE_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_INITIALIZATION_FAILED,XR_ERROR_RUNTIME_VERSION_INCOMPATIBLE,XR_ERROR_API_LAYER_NOT_PRESENT,XR_ERROR_EXTENSION_NOT_PRESENT,XR_ERROR_DRIVER_INCOMPATIBLE,XR_ERROR_VALIDATION_FAILURE">
+ <command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_OUT_OF_MEMORY,XR_ERROR_LIMIT_REACHED,XR_ERROR_INSTANCE_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_INITIALIZATION_FAILED,XR_ERROR_API_VERSION_UNSUPPORTED,XR_ERROR_API_LAYER_NOT_PRESENT,XR_ERROR_EXTENSION_NOT_PRESENT,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_NAME_INVALID">
<proto><type>XrResult</type> <name>xrCreateInstance</name></proto>
<param>const <type>XrInstanceCreateInfo</type>* <name>createInfo</name></param>
<param><type>XrInstance</type>* <name>instance</name></param>
</command>
- <command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_HANDLE_INVALID,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_RUNTIME_FAILURE">
+ <command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_HANDLE_INVALID">
<proto><type>XrResult</type> <name>xrDestroyInstance</name></proto>
- <param><type>XrInstance</type> <name>instance</name></param>
+ <param externsync="true_with_children"><type>XrInstance</type> <name>instance</name></param>
</command>
<command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_HANDLE_INVALID,XR_ERROR_INSTANCE_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_VALIDATION_FAILURE">
<proto><type>XrResult</type> <name>xrResultToString</name></proto>
@@ -1300,42 +1342,42 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<param>const <type>XrSessionCreateInfo</type>* <name>createInfo</name></param>
<param><type>XrSession</type>* <name>session</name></param>
</command>
- <command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_HANDLE_INVALID,XR_ERROR_VALIDATION_FAILURE">
+ <command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_HANDLE_INVALID">
<proto><type>XrResult</type> <name>xrDestroySession</name></proto>
- <param><type>XrSession</type> <name>session</name></param>
+ <param externsync="true_with_children"><type>XrSession</type> <name>session</name></param>
</command>
- <command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_HANDLE_INVALID,XR_ERROR_VALIDATION_FAILURE">
+ <command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_HANDLE_INVALID">
<proto><type>XrResult</type> <name>xrDestroySpace</name></proto>
- <param><type>XrSpace</type> <name>space</name></param>
+ <param externsync="true_with_children"><type>XrSpace</type> <name>space</name></param>
</command>
<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_SIZE_INSUFFICIENT,XR_ERROR_VALIDATION_FAILURE">
<proto><type>XrResult</type> <name>xrEnumerateSwapchainFormats</name></proto>
<param><type>XrSession</type> <name>session</name></param>
<param optional="true"><type>uint32_t</type> <name>formatCapacityInput</name></param>
- <param optional="true"><type>uint32_t</type>* <name>formatCountOutput</name></param>
+ <param><type>uint32_t</type>* <name>formatCountOutput</name></param>
<param optional="true" len="formatCapacityInput"><type>int64_t</type>* <name>formats</name></param>
</command>
- <command successcodes="XR_SUCCESS,XR_SESSION_LOSS_PENDING" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_SESSION_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_LIMIT_REACHED,XR_ERROR_HANDLE_INVALID,XR_ERROR_OUT_OF_MEMORY,XR_ERROR_SWAPCHAIN_FORMAT_UNSUPPORTED,XR_ERROR_VALIDATION_FAILURE">
+ <command successcodes="XR_SUCCESS,XR_SESSION_LOSS_PENDING" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_SESSION_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_LIMIT_REACHED,XR_ERROR_HANDLE_INVALID,XR_ERROR_OUT_OF_MEMORY,XR_ERROR_SWAPCHAIN_FORMAT_UNSUPPORTED,XR_ERROR_FEATURE_UNSUPPORTED,XR_ERROR_VALIDATION_FAILURE">
<proto><type>XrResult</type> <name>xrCreateSwapchain</name></proto>
<param><type>XrSession</type> <name>session</name></param>
<param>const <type>XrSwapchainCreateInfo</type>* <name>createInfo</name></param>
<param><type>XrSwapchain</type>* <name>swapchain</name></param>
</command>
- <command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_HANDLE_INVALID,XR_ERROR_VALIDATION_FAILURE">
+ <command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_HANDLE_INVALID">
<proto><type>XrResult</type> <name>xrDestroySwapchain</name></proto>
- <param><type>XrSwapchain</type> <name>swapchain</name></param>
+ <param externsync="true_with_children"><type>XrSwapchain</type> <name>swapchain</name></param>
</command>
<command successcodes="XR_SUCCESS,XR_SESSION_LOSS_PENDING" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_SESSION_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_SIZE_INSUFFICIENT,XR_ERROR_HANDLE_INVALID,XR_ERROR_VALIDATION_FAILURE">
<proto><type>XrResult</type> <name>xrEnumerateSwapchainImages</name></proto>
<param><type>XrSwapchain</type> <name>swapchain</name></param>
<param optional="true"><type>uint32_t</type> <name>imageCapacityInput</name></param>
- <param optional="true"><type>uint32_t</type>* <name>imageCountOutput</name></param>
+ <param><type>uint32_t</type>* <name>imageCountOutput</name></param>
<param optional="true" len="imageCapacityInput"><type>XrSwapchainImageBaseHeader</type>* <name>images</name></param>
</command>
<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_VALIDATION_FAILURE,XR_ERROR_CALL_ORDER_INVALID">
<proto><type>XrResult</type> <name>xrAcquireSwapchainImage</name></proto>
<param><type>XrSwapchain</type> <name>swapchain</name></param>
- <param>const <type>XrSwapchainImageAcquireInfo</type>* <name>acquireInfo</name></param>
+ <param optional="true">const <type>XrSwapchainImageAcquireInfo</type>* <name>acquireInfo</name></param>
<param><type>uint32_t</type>* <name>index</name></param>
</command>
<command successcodes="XR_SUCCESS,XR_TIMEOUT_EXPIRED,XR_SESSION_LOSS_PENDING" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_SESSION_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_HANDLE_INVALID,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_CALL_ORDER_INVALID">
@@ -1346,22 +1388,26 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<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_VALIDATION_FAILURE,XR_ERROR_CALL_ORDER_INVALID">
<proto><type>XrResult</type> <name>xrReleaseSwapchainImage</name></proto>
<param><type>XrSwapchain</type> <name>swapchain</name></param>
- <param>const <type>XrSwapchainImageReleaseInfo</type>* <name>releaseInfo</name></param>
+ <param optional="true">const <type>XrSwapchainImageReleaseInfo</type>* <name>releaseInfo</name></param>
</command>
- <command successcodes="XR_SUCCESS,XR_SESSION_VISIBILITY_UNAVAILABLE,XR_SESSION_LOSS_PENDING" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_SESSION_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_HANDLE_INVALID,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_SESSION_RUNNING,XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED">
+ <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_VALIDATION_FAILURE,XR_ERROR_SESSION_NOT_READY,XR_ERROR_SESSION_RUNNING,XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED">
<proto><type>XrResult</type> <name>xrBeginSession</name></proto>
<param><type>XrSession</type> <name>session</name></param>
<param>const <type>XrSessionBeginInfo</type>* <name>beginInfo</name></param>
</command>
- <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_SESSION_NOT_RUNNING,XR_ERROR_VALIDATION_FAILURE">
+ <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_SESSION_NOT_STOPPING,XR_ERROR_SESSION_NOT_RUNNING,XR_ERROR_VALIDATION_FAILURE">
<proto><type>XrResult</type> <name>xrEndSession</name></proto>
<param><type>XrSession</type> <name>session</name></param>
</command>
+ <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_SESSION_NOT_RUNNING,XR_ERROR_VALIDATION_FAILURE">
+ <proto><type>XrResult</type> <name>xrRequestExitSession</name></proto>
+ <param><type>XrSession</type> <name>session</name></param>
+ </command>
<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_SIZE_INSUFFICIENT,XR_ERROR_VALIDATION_FAILURE">
<proto><type>XrResult</type> <name>xrEnumerateReferenceSpaces</name></proto>
<param><type>XrSession</type> <name>session</name></param>
<param optional="true"><type>uint32_t</type> <name>spaceCapacityInput</name></param>
- <param optional="true"><type>uint32_t</type>* <name>spaceCountOutput</name></param>
+ <param><type>uint32_t</type>* <name>spaceCountOutput</name></param>
<param optional="true" len="spaceCapacityInput"><type>XrReferenceSpaceType</type>* <name>spaces</name></param>
</command>
<command successcodes="XR_SUCCESS,XR_SESSION_LOSS_PENDING" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_SESSION_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_LIMIT_REACHED,XR_ERROR_OUT_OF_MEMORY,XR_ERROR_HANDLE_INVALID,XR_ERROR_REFERENCE_SPACE_UNSUPPORTED,XR_ERROR_POSE_INVALID,XR_ERROR_VALIDATION_FAILURE">
@@ -1370,33 +1416,34 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<param>const <type>XrReferenceSpaceCreateInfo</type>* <name>createInfo</name></param>
<param><type>XrSpace</type>* <name>space</name></param>
</command>
- <command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_OUT_OF_MEMORY,XR_ERROR_HANDLE_INVALID,XR_ERROR_LIMIT_REACHED,XR_ERROR_POSE_INVALID,XR_ERROR_PATH_INVALID,XR_ERROR_VALIDATION_FAILURE">
+ <command successcodes="XR_SUCCESS,XR_SESSION_LOSS_PENDING" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_SESSION_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_OUT_OF_MEMORY,XR_ERROR_HANDLE_INVALID,XR_ERROR_ACTION_TYPE_MISMATCH,XR_ERROR_LIMIT_REACHED,XR_ERROR_POSE_INVALID,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_PATH_UNSUPPORTED,XR_ERROR_PATH_INVALID">
<proto><type>XrResult</type> <name>xrCreateActionSpace</name></proto>
- <param><type>XrAction</type> <name>action</name></param>
+ <param><type>XrSession</type> <name>session</name></param>
<param>const <type>XrActionSpaceCreateInfo</type>* <name>createInfo</name></param>
<param><type>XrSpace</type>* <name>space</name></param>
</command>
- <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_VALIDATION_FAILURE">
+ <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_VALIDATION_FAILURE,XR_ERROR_TIME_INVALID">
<proto><type>XrResult</type> <name>xrLocateSpace</name></proto>
<param><type>XrSpace</type> <name>space</name></param>
<param><type>XrSpace</type> <name>baseSpace</name></param>
<param><type>XrTime</type> <name>time</name></param>
- <param><type>XrSpaceRelation</type>* <name>relation</name></param>
+ <param><type>XrSpaceLocation</type>* <name>location</name></param>
</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">
<proto><type>XrResult</type> <name>xrEnumerateViewConfigurations</name></proto>
<param><type>XrInstance</type> <name>instance</name></param>
<param><type>XrSystemId</type> <name>systemId</name></param>
<param optional="true"><type>uint32_t</type> <name>viewConfigurationTypeCapacityInput</name></param>
- <param optional="true"><type>uint32_t</type>* <name>viewConfigurationTypeCountOutput</name></param>
+ <param><type>uint32_t</type>* <name>viewConfigurationTypeCountOutput</name></param>
<param optional="true" len="viewConfigurationTypeCapacityInput"><type>XrViewConfigurationType</type>* <name>viewConfigurationTypes</name></param>
</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">
+ <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_VIEW_CONFIGURATION_TYPE_UNSUPPORTED,XR_ERROR_SIZE_INSUFFICIENT">
<proto><type>XrResult</type> <name>xrEnumerateEnvironmentBlendModes</name></proto>
<param><type>XrInstance</type> <name>instance</name></param>
<param><type>XrSystemId</type> <name>systemId</name></param>
+ <param><type>XrViewConfigurationType</type> <name>viewConfigurationType</name></param>
<param optional="true"><type>uint32_t</type> <name>environmentBlendModeCapacityInput</name></param>
- <param optional="true"><type>uint32_t</type>* <name>environmentBlendModeCountOutput</name></param>
+ <param><type>uint32_t</type>* <name>environmentBlendModeCountOutput</name></param>
<param optional="true" len="environmentBlendModeCapacityInput"><type>XrEnvironmentBlendMode</type>* <name>environmentBlendModes</name></param>
</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_VIEW_CONFIGURATION_TYPE_UNSUPPORTED">
@@ -1412,24 +1459,24 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<param><type>XrSystemId</type> <name>systemId</name></param>
<param><type>XrViewConfigurationType</type> <name>viewConfigurationType</name></param>
<param optional="true"><type>uint32_t</type> <name>viewCapacityInput</name></param>
- <param optional="true"><type>uint32_t</type>* <name>viewCountOutput</name></param>
+ <param><type>uint32_t</type>* <name>viewCountOutput</name></param>
<param optional="true" len="viewCapacityInput"><type>XrViewConfigurationView</type>* <name>views</name></param>
</command>
- <command successcodes="XR_SUCCESS,XR_SESSION_LOSS_PENDING,XR_FRAME_DISCARDED,XR_SESSION_VISIBILITY_UNAVAILABLE" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_SESSION_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_HANDLE_INVALID,XR_ERROR_SESSION_NOT_RUNNING,XR_ERROR_VALIDATION_FAILURE">
+ <command successcodes="XR_SUCCESS,XR_SESSION_LOSS_PENDING,XR_FRAME_DISCARDED" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_SESSION_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_HANDLE_INVALID,XR_ERROR_SESSION_NOT_RUNNING,XR_ERROR_VALIDATION_FAILURE">
<proto><type>XrResult</type> <name>xrBeginFrame</name></proto>
<param><type>XrSession</type> <name>session</name></param>
<param optional="true">const <type>XrFrameBeginInfo</type>* <name>frameBeginInfo</name></param>
</command>
- <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_SIZE_INSUFFICIENT,XR_ERROR_VALIDATION_FAILURE">
+ <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_SIZE_INSUFFICIENT,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED,XR_ERROR_TIME_INVALID">
<proto><type>XrResult</type> <name>xrLocateViews</name></proto>
<param><type>XrSession</type> <name>session</name></param>
<param>const <type>XrViewLocateInfo</type>* <name>viewLocateInfo</name></param>
<param><type>XrViewState</type>* <name>viewState</name></param>
<param optional="true"><type>uint32_t</type> <name>viewCapacityInput</name></param>
- <param optional="true"><type>uint32_t</type>* <name>viewCountOutput</name></param>
+ <param><type>uint32_t</type>* <name>viewCountOutput</name></param>
<param optional="true" len="viewCapacityInput"><type>XrView</type>* <name>views</name></param>
</command>
- <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_CALL_ORDER_INVALID,XR_ERROR_LAYER_INVALID,XR_ERROR_SWAPCHAIN_RECT_INVALID,XR_ERROR_ENVIRONMENT_BLEND_MODE_UNSUPPORTED,XR_ERROR_SESSION_NOT_RUNNING,XR_ERROR_LAYER_LIMIT_EXCEEDED,XR_ERROR_VALIDATION_FAILURE">
+ <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_CALL_ORDER_INVALID,XR_ERROR_LAYER_INVALID,XR_ERROR_SWAPCHAIN_RECT_INVALID,XR_ERROR_ENVIRONMENT_BLEND_MODE_UNSUPPORTED,XR_ERROR_SESSION_NOT_RUNNING,XR_ERROR_LAYER_LIMIT_EXCEEDED,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_TIME_INVALID">
<proto><type>XrResult</type> <name>xrEndFrame</name></proto>
<param><type>XrSession</type> <name>session</name></param>
<param>const <type>XrFrameEndInfo</type>* <name>frameEndInfo</name></param>
@@ -1439,19 +1486,20 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<param><type>XrSession</type> <name>session</name></param>
<param optional="true">const <type>XrFrameWaitInfo</type>* <name>frameWaitInfo</name></param>
<param><type>XrFrameState</type>* <name>frameState</name></param>
+ <implicitexternsyncparams>
+ <param>the pname:session parameter by any other flink:xrWaitFrame call</param>
+ </implicitexternsyncparams>
</command>
- <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_VALIDATION_FAILURE,XR_ERROR_ACTION_TYPE_MISMATCH,XR_ERROR_SESSION_NOT_RUNNING,XR_ERROR_PATH_INVALID">
+ <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_VALIDATION_FAILURE,XR_ERROR_ACTIONSET_NOT_ATTACHED,XR_ERROR_ACTION_TYPE_MISMATCH,XR_ERROR_PATH_INVALID,XR_ERROR_PATH_UNSUPPORTED">
<proto><type>XrResult</type> <name>xrApplyHapticFeedback</name></proto>
- <param><type>XrAction</type> <name>hapticAction</name></param>
- <param optional="true"><type>uint32_t</type> <name>countSubactionPaths</name></param>
- <param len="countSubactionPaths" optional="true">const <type>XrPath</type>* <name>subactionPaths</name></param>
- <param>const <type>XrHapticBaseHeader</type>* <name>hapticEvent</name></param>
+ <param><type>XrSession</type> <name>session</name></param>
+ <param>const <type>XrHapticActionInfo</type>* <name>hapticActionInfo</name></param>
+ <param>const <type>XrHapticBaseHeader</type>* <name>hapticFeedback</name></param>
</command>
- <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_VALIDATION_FAILURE,XR_ERROR_ACTION_TYPE_MISMATCH,XR_ERROR_SESSION_NOT_RUNNING,XR_ERROR_PATH_INVALID">
+ <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_VALIDATION_FAILURE,XR_ERROR_ACTIONSET_NOT_ATTACHED,XR_ERROR_ACTION_TYPE_MISMATCH,XR_ERROR_PATH_INVALID,XR_ERROR_PATH_UNSUPPORTED">
<proto><type>XrResult</type> <name>xrStopHapticFeedback</name></proto>
- <param><type>XrAction</type> <name>hapticAction</name></param>
- <param optional="true"><type>uint32_t</type> <name>countSubactionPaths</name></param>
- <param len="countSubactionPaths" optional="true">const <type>XrPath</type>* <name>subactionPaths</name></param>
+ <param><type>XrSession</type> <name>session</name></param>
+ <param>const <type>XrHapticActionInfo</type>* <name>hapticActionInfo</name></param>
</command>
<command successcodes="XR_SUCCESS,XR_EVENT_UNAVAILABLE" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_HANDLE_INVALID,XR_ERROR_VALIDATION_FAILURE">
<proto><type>XrResult</type> <name>xrPollEvent</name></proto>
@@ -1469,7 +1517,7 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<param><type>XrInstance</type> <name>instance</name></param>
<param><type>XrPath</type> <name>path</name></param>
<param optional="true"><type>uint32_t</type> <name>bufferCapacityInput</name></param>
- <param optional="true"><type>uint32_t</type>* <name>bufferCountOutput</name></param>
+ <param><type>uint32_t</type>* <name>bufferCountOutput</name></param>
<param optional="true" len="bufferCapacityInput"><type>char</type>* <name>buffer</name></param>
</command>
<command successcodes="XR_SUCCESS,XR_SPACE_BOUNDS_UNAVAILABLE,XR_SESSION_LOSS_PENDING" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_SESSION_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_HANDLE_INVALID,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_FUNCTION_UNSUPPORTED,XR_ERROR_REFERENCE_SPACE_UNSUPPORTED">
@@ -1491,101 +1539,102 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<param><type>XrSwapchain</type>* <name>swapchain</name></param>
<param><type>jobject</type>* <name>surface</name></param>
</command>
- <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_ACTION_TYPE_MISMATCH,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_SESSION_NOT_RUNNING,XR_ERROR_PATH_INVALID">
+ <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_ACTIONSET_NOT_ATTACHED,XR_ERROR_ACTION_TYPE_MISMATCH,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_PATH_INVALID,XR_ERROR_PATH_UNSUPPORTED">
<proto><type>XrResult</type> <name>xrGetActionStateBoolean</name></proto>
- <param><type>XrAction</type> <name>action</name></param>
- <param optional="true"><type>uint32_t</type> <name>countSubactionPaths</name></param>
- <param len="countSubactionPaths" optional="true">const <type>XrPath</type>* <name>subactionPaths</name></param>
- <param><type>XrActionStateBoolean</type>* <name>data</name></param>
+ <param><type>XrSession</type> <name>session</name></param>
+ <param>const <type>XrActionStateGetInfo</type>* <name>getInfo</name></param>
+ <param><type>XrActionStateBoolean</type>* <name>state</name></param>
</command>
- <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_ACTION_TYPE_MISMATCH,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_SESSION_NOT_RUNNING,XR_ERROR_PATH_INVALID">
- <proto><type>XrResult</type> <name>xrGetActionStateVector1f</name></proto>
- <param><type>XrAction</type> <name>action</name></param>
- <param optional="true"><type>uint32_t</type> <name>countSubactionPaths</name></param>
- <param len="countSubactionPaths" optional="true">const <type>XrPath</type>* <name>subactionPaths</name></param>
- <param><type>XrActionStateVector1f</type>* <name>data</name></param>
+ <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_ACTIONSET_NOT_ATTACHED,XR_ERROR_ACTION_TYPE_MISMATCH,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_PATH_INVALID,XR_ERROR_PATH_UNSUPPORTED">
+ <proto><type>XrResult</type> <name>xrGetActionStateFloat</name></proto>
+ <param><type>XrSession</type> <name>session</name></param>
+ <param>const <type>XrActionStateGetInfo</type>* <name>getInfo</name></param>
+ <param><type>XrActionStateFloat</type>* <name>state</name></param>
</command>
- <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_ACTION_TYPE_MISMATCH,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_SESSION_NOT_RUNNING,XR_ERROR_PATH_INVALID">
+ <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_ACTIONSET_NOT_ATTACHED,XR_ERROR_ACTION_TYPE_MISMATCH,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_PATH_INVALID,XR_ERROR_PATH_UNSUPPORTED">
<proto><type>XrResult</type> <name>xrGetActionStateVector2f</name></proto>
- <param><type>XrAction</type> <name>action</name></param>
- <param optional="true"><type>uint32_t</type> <name>countSubactionPaths</name></param>
- <param len="countSubactionPaths" optional="true">const <type>XrPath</type>* <name>subactionPaths</name></param>
- <param><type>XrActionStateVector2f</type>* <name>data</name></param>
+ <param><type>XrSession</type> <name>session</name></param>
+ <param>const <type>XrActionStateGetInfo</type>* <name>getInfo</name></param>
+ <param><type>XrActionStateVector2f</type>* <name>state</name></param>
</command>
- <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_ACTION_TYPE_MISMATCH,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_SESSION_NOT_RUNNING,XR_ERROR_PATH_INVALID">
+ <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_ACTIONSET_NOT_ATTACHED,XR_ERROR_ACTION_TYPE_MISMATCH,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_PATH_INVALID,XR_ERROR_PATH_UNSUPPORTED">
<proto><type>XrResult</type> <name>xrGetActionStatePose</name></proto>
- <param><type>XrAction</type> <name>action</name></param>
- <param optional="true"><type>XrPath</type> <name>subactionPath</name></param>
- <param><type>XrActionStatePose</type>* <name>data</name></param>
+ <param><type>XrSession</type> <name>session</name></param>
+ <param>const <type>XrActionStateGetInfo</type>* <name>getInfo</name></param>
+ <param><type>XrActionStatePose</type>* <name>state</name></param>
</command>
- <command successcodes="XR_SUCCESS,XR_SESSION_LOSS_PENDING" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_SESSION_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_LIMIT_REACHED,XR_ERROR_HANDLE_INVALID,XR_ERROR_SESSION_RUNNING,XR_ERROR_OUT_OF_MEMORY,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_NAME_DUPLICATED,XR_ERROR_NAME_INVALID,XR_ERROR_PATH_FORMAT_INVALID">
+ <command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_LIMIT_REACHED,XR_ERROR_HANDLE_INVALID,XR_ERROR_OUT_OF_MEMORY,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_NAME_DUPLICATED,XR_ERROR_NAME_INVALID,XR_ERROR_PATH_FORMAT_INVALID">
<proto><type>XrResult</type> <name>xrCreateActionSet</name></proto>
- <param><type>XrSession</type> <name>session</name></param>
+ <param><type>XrInstance</type> <name>instance</name></param>
<param>const <type>XrActionSetCreateInfo</type>* <name>createInfo</name></param>
<param><type>XrActionSet</type>* <name>actionSet</name></param>
</command>
- <command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_HANDLE_INVALID,XR_ERROR_VALIDATION_FAILURE">
+ <command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_HANDLE_INVALID">
<proto><type>XrResult</type> <name>xrDestroyActionSet</name></proto>
- <param><type>XrActionSet</type> <name>actionSet</name></param>
+ <param externsync="true_with_children"><type>XrActionSet</type> <name>actionSet</name></param>
</command>
- <command successcodes="XR_SUCCESS,XR_SESSION_LOSS_PENDING" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_SESSION_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_LIMIT_REACHED,XR_ERROR_HANDLE_INVALID,XR_ERROR_OUT_OF_MEMORY,XR_ERROR_PATH_INVALID,XR_ERROR_SESSION_RUNNING,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_NAME_DUPLICATED,XR_ERROR_NAME_INVALID,XR_ERROR_PATH_FORMAT_INVALID">
+ <command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_ACTIONSETS_ALREADY_ATTACHED,XR_ERROR_LIMIT_REACHED,XR_ERROR_HANDLE_INVALID,XR_ERROR_OUT_OF_MEMORY,XR_ERROR_PATH_INVALID,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_NAME_DUPLICATED,XR_ERROR_NAME_INVALID,XR_ERROR_PATH_FORMAT_INVALID,XR_ERROR_PATH_UNSUPPORTED">
<proto><type>XrResult</type> <name>xrCreateAction</name></proto>
<param><type>XrActionSet</type> <name>actionSet</name></param>
<param>const <type>XrActionCreateInfo</type>* <name>createInfo</name></param>
<param><type>XrAction</type>* <name>action</name></param>
</command>
- <command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_HANDLE_INVALID,XR_ERROR_VALIDATION_FAILURE">
+ <command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_HANDLE_INVALID">
<proto><type>XrResult</type> <name>xrDestroyAction</name></proto>
- <param><type>XrAction</type> <name>action</name></param>
+ <param externsync="true_with_children"><type>XrAction</type> <name>action</name></param>
</command>
- <command successcodes="XR_SUCCESS,XR_SESSION_LOSS_PENDING" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_HANDLE_INVALID,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_SESSION_RUNNING,XR_ERROR_BINDINGS_DUPLICATED,XR_ERROR_PATH_INVALID,XR_ERROR_SESSION_LOST">
- <proto><type>XrResult</type> <name>xrSetInteractionProfileSuggestedBindings</name></proto>
- <param><type>XrSession</type> <name>session</name></param>
+ <command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_ACTIONSETS_ALREADY_ATTACHED,XR_ERROR_HANDLE_INVALID,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_PATH_UNSUPPORTED,XR_ERROR_PATH_INVALID">
+ <proto><type>XrResult</type> <name>xrSuggestInteractionProfileBindings</name></proto>
+ <param><type>XrInstance</type> <name>instance</name></param>
<param>const <type>XrInteractionProfileSuggestedBinding</type>* <name>suggestedBindings</name></param>
</command>
- <command successcodes="XR_SUCCESS,XR_SESSION_LOSS_PENDING" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_HANDLE_INVALID,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_SESSION_NOT_RUNNING,XR_ERROR_PATH_INVALID,XR_ERROR_SESSION_LOST">
+ <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_VALIDATION_FAILURE,XR_ERROR_ACTIONSETS_ALREADY_ATTACHED">
+ <proto><type>XrResult</type> <name>xrAttachSessionActionSets</name></proto>
+ <param><type>XrSession</type> <name>session</name></param>
+ <param>const <type>XrSessionActionSetsAttachInfo</type>* <name>attachInfo</name></param>
+ </command>
+ <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_ACTIONSET_NOT_ATTACHED,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_PATH_UNSUPPORTED,XR_ERROR_PATH_INVALID">
<proto><type>XrResult</type> <name>xrGetCurrentInteractionProfile</name></proto>
<param><type>XrSession</type> <name>session</name></param>
<param><type>XrPath</type> <name>topLevelUserPath</name></param>
- <param><type>XrInteractionProfileInfo</type>* <name>interactionProfile</name></param>
+ <param><type>XrInteractionProfileState</type>* <name>interactionProfile</name></param>
</command>
- <command successcodes="XR_SUCCESS,XR_SESSION_LOSS_PENDING,XR_SESSION_NOT_FOCUSED" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_SESSION_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_HANDLE_INVALID,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_SESSION_NOT_RUNNING,XR_ERROR_PATH_INVALID">
- <proto><type>XrResult</type> <name>xrSyncActionData</name></proto>
+ <command successcodes="XR_SUCCESS,XR_SESSION_LOSS_PENDING,XR_SESSION_NOT_FOCUSED" errorcodes="XR_ERROR_INSTANCE_LOST,XR_ERROR_SESSION_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_HANDLE_INVALID,XR_ERROR_ACTIONSET_NOT_ATTACHED,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_PATH_INVALID,XR_ERROR_PATH_UNSUPPORTED">
+ <proto><type>XrResult</type> <name>xrSyncActions</name></proto>
<param><type>XrSession</type> <name>session</name></param>
- <param><type>uint32_t</type> <name>countActionSets</name></param>
- <param len="countActionSets">const <type>XrActiveActionSet</type>* <name>actionSets</name></param>
+ <param>const <type>XrActionsSyncInfo</type>* <name>syncInfo</name></param>
</command>
- <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_SIZE_INSUFFICIENT,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_SESSION_NOT_RUNNING">
- <proto><type>XrResult</type> <name>xrGetBoundSourcesForAction</name></proto>
- <param><type>XrAction</type> <name>action</name></param>
+ <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_ACTIONSET_NOT_ATTACHED,XR_ERROR_SIZE_INSUFFICIENT,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_PATH_INVALID">
+ <proto><type>XrResult</type> <name>xrEnumerateBoundSourcesForAction</name></proto>
+ <param><type>XrSession</type> <name>session</name></param>
+ <param>const <type>XrBoundSourcesForActionEnumerateInfo</type>* <name>enumerateInfo</name></param>
<param optional="true"><type>uint32_t</type> <name>sourceCapacityInput</name></param>
- <param optional="true"><type>uint32_t</type>* <name>sourceCountOutput</name></param>
+ <param><type>uint32_t</type>* <name>sourceCountOutput</name></param>
<param optional="true" len="sourceCapacityInput"><type>XrPath</type>* <name>sources</name></param>
</command>
- <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_PATH_INVALID,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_SIZE_INSUFFICIENT">
+ <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_VALIDATION_FAILURE,XR_ERROR_SIZE_INSUFFICIENT,XR_ERROR_PATH_INVALID,XR_ERROR_PATH_UNSUPPORTED">
<proto><type>XrResult</type> <name>xrGetInputSourceLocalizedName</name></proto>
<param><type>XrSession</type> <name>session</name></param>
- <param><type>XrPath</type> <name>source</name></param>
- <param><type>XrInputSourceLocalizedNameFlags</type> <name>whichComponents</name></param>
+ <param>const <type>XrInputSourceLocalizedNameGetInfo</type>* <name>getInfo</name></param>
<param optional="true"><type>uint32_t</type> <name>bufferCapacityInput</name></param>
- <param optional="true"><type>uint32_t</type>* <name>bufferCountOutput</name></param>
+ <param><type>uint32_t</type>* <name>bufferCountOutput</name></param>
<param optional="true" len="bufferCapacityInput"><type>char</type>* <name>buffer</name></param>
</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">
<proto><type>XrResult</type> <name>xrGetVulkanInstanceExtensionsKHR</name></proto>
<param><type>XrInstance</type> <name>instance</name></param>
<param><type>XrSystemId</type> <name>systemId</name></param>
- <param optional="true"><type>uint32_t</type> <name>namesCapacityInput</name></param>
- <param optional="true"><type>uint32_t</type>* <name>namesCountOutput</name></param>
- <param optional="true" len="namesCapacityInput,null-terminated"><type>char</type>* <name>namesString</name></param>
+ <param optional="true"><type>uint32_t</type> <name>bufferCapacityInput</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>
</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">
<proto><type>XrResult</type> <name>xrGetVulkanDeviceExtensionsKHR</name></proto>
<param><type>XrInstance</type> <name>instance</name></param>
<param><type>XrSystemId</type> <name>systemId</name></param>
- <param optional="true"><type>uint32_t</type> <name>namesCapacityInput</name></param>
- <param optional="true"><type>uint32_t</type>* <name>namesCountOutput</name></param>
- <param optional="true" len="namesCapacityInput,null-terminated"><type>char</type>* <name>namesString</name></param>
+ <param optional="true"><type>uint32_t</type> <name>bufferCapacityInput</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>
</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">
<proto><type>XrResult</type> <name>xrGetVulkanGraphicsDeviceKHR</name></proto>
@@ -1612,12 +1661,6 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<param><type>XrSystemId</type> <name>systemId</name></param>
<param><type>XrGraphicsRequirementsVulkanKHR</type>* <name>graphicsRequirements</name></param>
</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">
- <proto><type>XrResult</type> <name>xrGetD3D10GraphicsRequirementsKHR</name></proto>
- <param><type>XrInstance</type> <name>instance</name></param>
- <param><type>XrSystemId</type> <name>systemId</name></param>
- <param><type>XrGraphicsRequirementsD3D10KHR</type>* <name>graphicsRequirements</name></param>
- </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">
<proto><type>XrResult</type> <name>xrGetD3D11GraphicsRequirementsKHR</name></proto>
<param><type>XrInstance</type> <name>instance</name></param>
@@ -1651,13 +1694,16 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
</command>
<command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_OUT_OF_MEMORY,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_LIMIT_REACHED,XR_ERROR_HANDLE_INVALID,XR_ERROR_INSTANCE_LOST,XR_ERROR_FUNCTION_UNSUPPORTED">
<proto><type>XrResult</type> <name>xrCreateDebugUtilsMessengerEXT</name></proto>
- <param><type>XrInstance</type> <name>instance</name></param>
+ <param externsync="true_with_children"><type>XrInstance</type> <name>instance</name></param>
<param>const <type>XrDebugUtilsMessengerCreateInfoEXT</type>* <name>createInfo</name></param>
<param><type>XrDebugUtilsMessengerEXT</type>* <name>messenger</name></param>
</command>
- <command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_VALIDATION_FAILURE,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_DEBUG_UTILS_MESSENGER_INVALID_EXT,XR_ERROR_FUNCTION_UNSUPPORTED">
+ <command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_HANDLE_INVALID,XR_ERROR_FUNCTION_UNSUPPORTED">
<proto><type>XrResult</type> <name>xrDestroyDebugUtilsMessengerEXT</name></proto>
- <param><type>XrDebugUtilsMessengerEXT</type> <name>messenger</name></param>
+ <param externsync="true"><type>XrDebugUtilsMessengerEXT</type> <name>messenger</name></param>
+ <implicitexternsyncparams>
+ <param>the slink:XrInstance used to create pname:messenger, and all of its child handles</param>
+ </implicitexternsyncparams>
</command>
<command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_HANDLE_INVALID,XR_ERROR_INSTANCE_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_FUNCTION_UNSUPPORTED">
<proto><type>XrResult</type> <name>xrSubmitDebugUtilsMessageEXT</name></proto>
@@ -1682,13 +1728,13 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
</command>
<!-- commands for XR_KHR_win32_convert_performance_counter_time -->
- <command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_HANDLE_INVALID,XR_ERROR_INSTANCE_LOST,XR_ERROR_RUNTIME_FAILURE,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_VALIDATION_FAILURE,XR_ERROR_TIME_INVALID,XR_ERROR_FUNCTION_UNSUPPORTED">
<proto><type>XrResult</type> <name>xrConvertTimeToWin32PerformanceCounterKHR</name></proto>
<param><type>XrInstance</type> <name>instance</name></param>
<param><type>XrTime</type> <name>time</name></param>
<param><type>LARGE_INTEGER</type>* <name>performanceCounter</name></param>
</command>
- <command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_HANDLE_INVALID,XR_ERROR_INSTANCE_LOST,XR_ERROR_RUNTIME_FAILURE,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_VALIDATION_FAILURE,XR_ERROR_TIME_INVALID,XR_ERROR_FUNCTION_UNSUPPORTED">
<proto><type>XrResult</type> <name>xrConvertWin32PerformanceCounterToTimeKHR</name></proto>
<param><type>XrInstance</type> <name>instance</name></param>
<param>const <type>LARGE_INTEGER</type>* <name>performanceCounter</name></param>
@@ -1696,13 +1742,13 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
</command>
<!-- 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_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>
<param><type>XrInstance</type> <name>instance</name></param>
<param><type>XrTime</type> <name>time</name></param>
<param>struct <type>timespec</type>* <name>timespecTime</name></param>
</command>
- <command successcodes="XR_SUCCESS" errorcodes="XR_ERROR_HANDLE_INVALID,XR_ERROR_INSTANCE_LOST,XR_ERROR_RUNTIME_FAILURE,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_VALIDATION_FAILURE,XR_ERROR_TIME_INVALID,XR_ERROR_FUNCTION_UNSUPPORTED">
<proto><type>XrResult</type> <name>xrConvertTimespecTimeToTimeKHR</name></proto>
<param><type>XrInstance</type> <name>instance</name></param>
<param>const struct <type>timespec</type>* <name>timespecTime</name></param>
@@ -1710,7 +1756,7 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
</command>
<!-- commands for XR_KHR_visibility_mask -->
- <command successcodes="XR_SUCCESS,XR_SESSION_LOSS_PENDING" errorcodes="XR_ERROR_HANDLE_INVALID,XR_ERROR_INSTANCE_LOST,XR_ERROR_SESSION_LOST,XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_FUNCTION_UNSUPPORTED">
+ <command successcodes="XR_SUCCESS,XR_SESSION_LOSS_PENDING" errorcodes="XR_ERROR_HANDLE_INVALID,XR_ERROR_INSTANCE_LOST,XR_ERROR_RUNTIME_FAILURE,XR_ERROR_VALIDATION_FAILURE,XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED,XR_ERROR_SIZE_INSUFFICIENT,XR_ERROR_SESSION_LOST,XR_ERROR_FUNCTION_UNSUPPORTED">
<proto><type>XrResult</type> <name>xrGetVisibilityMaskKHR</name></proto>
<param><type>XrSession</type> <name>session</name></param>
<param><type>XrViewConfigurationType</type> <name>viewConfigurationType</name></param>
@@ -1721,7 +1767,14 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
</commands>
<!-- SECTION: OpenXR API interface definitions -->
- <feature api="openxr" name="XR_VERSION_0_90" number="0.90">
+ <!--
+ Note: Only explicitly specify types if they are not
+ referenced by a function or another type. (For example,
+ if they're expected to be in a next chain.)
+ Types referenced by functions are included automatically.
+ -->
+
+ <feature api="openxr" name="XR_VERSION_1_0" number="1.0">
<require comment="Header boilerplate">
<type name="openxr_platform_defines"/>
</require>
@@ -1730,7 +1783,7 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<type name="XR_VERSION_MAJOR"/>
<type name="XR_VERSION_MINOR"/>
<type name="XR_VERSION_PATCH"/>
- <type name="XR_HEADER_VERSION"/>
+ <type name="XrVersion"/>
</require>
<require comment="API constants">
<enum name="XR_TRUE"/>
@@ -1787,13 +1840,12 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<command name="xrCreateActionSpace"/>
<command name="xrLocateSpace"/>
<command name="xrDestroySpace"/>
+ <type name="XrSpaceVelocity"/>
</require>
<require comment="ViewConfigurations">
<command name="xrEnumerateViewConfigurations"/>
<command name="xrGetViewConfigurationProperties"/>
<command name="xrEnumerateViewConfigurationViews"/>
- <type name="XrViewConfigurationProperties"/>
- <type name="XrViewConfigurationView"/>
</require>
<require comment="Image">
<command name="xrEnumerateSwapchainFormats"/>
@@ -1807,6 +1859,7 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<require comment="Session">
<command name="xrBeginSession"/>
<command name="xrEndSession"/>
+ <command name="xrRequestExitSession"/>
</require>
<require comment="Display Timing">
<command name="xrWaitFrame"/>
@@ -1823,14 +1876,15 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<command name="xrDestroyActionSet"/>
<command name="xrCreateAction"/>
<command name="xrDestroyAction"/>
- <command name="xrSetInteractionProfileSuggestedBindings"/>
+ <command name="xrSuggestInteractionProfileBindings"/>
+ <command name="xrAttachSessionActionSets"/>
<command name="xrGetCurrentInteractionProfile"/>
<command name="xrGetActionStateBoolean"/>
- <command name="xrGetActionStateVector1f"/>
+ <command name="xrGetActionStateFloat"/>
<command name="xrGetActionStateVector2f"/>
<command name="xrGetActionStatePose"/>
- <command name="xrSyncActionData"/>
- <command name="xrGetBoundSourcesForAction"/>
+ <command name="xrSyncActions"/>
+ <command name="xrEnumerateBoundSourcesForAction"/>
<command name="xrGetInputSourceLocalizedName"/>
</require>
<require comment="Haptics">
@@ -1884,7 +1938,7 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<!-- Android Thread Settings extension -->
<extension name="XR_KHR_android_thread_settings" number="4" type="instance" supported="openxr" protect="XR_USE_PLATFORM_ANDROID">
<require>
- <enum value="4" name="XR_KHR_android_thread_settings_SPEC_VERSION"/>
+ <enum value="5" name="XR_KHR_android_thread_settings_SPEC_VERSION"/>
<enum value="&quot;XR_KHR_android_thread_settings&quot;" name="XR_KHR_ANDROID_THREAD_SETTINGS_EXTENSION_NAME"/>
<enum offset="0" extends="XrResult" dir="-" name="XR_ERROR_ANDROID_THREAD_SETTINGS_ID_INVALID_KHR" comment="xrSetAndroidApplicationThreadKHR failed as thread id is invalid."/>
<enum offset="1" extends="XrResult" dir="-" name="XR_ERROR_ANDROID_THREAD_SETTINGS_FAILURE_KHR" comment="xrSetAndroidApplicationThreadKHR failed setting the thread attributes/priority."/>
@@ -1904,7 +1958,7 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<!-- Non-core composition cube layer -->
<extension name="XR_KHR_composition_layer_cube" number="7" type="instance" supported="openxr">
- <require comment="Types not directly used by the API">
+ <require>
<enum value="8" name="XR_KHR_composition_layer_cube_SPEC_VERSION"/>
<enum value="&quot;XR_KHR_composition_layer_cube&quot;" name="XR_KHR_COMPOSITION_LAYER_CUBE_EXTENSION_NAME"/>
<type name="XrCompositionLayerCubeKHR"/>
@@ -1915,7 +1969,7 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<!-- Android Create Instance extension -->
<extension name="XR_KHR_android_create_instance" number="9" type="instance" supported="openxr" protect="XR_USE_PLATFORM_ANDROID">
<require>
- <enum value="2" name="XR_KHR_android_create_instance_SPEC_VERSION"/>
+ <enum value="3" name="XR_KHR_android_create_instance_SPEC_VERSION"/>
<enum value="&quot;XR_KHR_android_create_instance&quot;" name="XR_KHR_ANDROID_CREATE_INSTANCE_EXTENSION_NAME"/>
<enum offset="0" extends="XrStructureType" name="XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR"/>
<type name="XrInstanceCreateInfoAndroidKHR"/>
@@ -1932,10 +1986,10 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
</require>
</extension>
- <!-- Headless "graphics binding" extension -->
- <extension name="XR_KHR_headless" number="14" type="instance" supported="openxr">
+ <!-- Reserved for headless "graphics binding" extension -->
+ <extension name="XR_KHR_headless" number="14" type="instance" supported="disabled">
<require>
- <enum value="2" name="XR_KHR_headless_SPEC_VERSION"/>
+ <enum value="4" name="XR_KHR_headless_SPEC_VERSION"/>
<enum value="&quot;XR_KHR_headless&quot;" name="XR_KHR_HEADLESS_EXTENSION_NAME"/>
</require>
</extension>
@@ -1943,7 +1997,7 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<!-- 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">
<require>
- <enum value="1" name="XR_KHR_vulkan_swapchain_format_list_SPEC_VERSION"/>
+ <enum value="2" 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 offset="0" extends="XrStructureType" name="XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR"/>
<type name="XrVulkanSwapchainFormatListCreateInfoKHR"/>
@@ -1978,7 +2032,7 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<!-- Non-core composition cylinder layer -->
<extension name="XR_KHR_composition_layer_cylinder" number="18" type="instance" supported="openxr">
- <require comment="Types not directly used by the API">
+ <require>
<enum value="4" name="XR_KHR_composition_layer_cylinder_SPEC_VERSION"/>
<enum value="&quot;XR_KHR_composition_layer_cylinder&quot;" name="XR_KHR_COMPOSITION_LAYER_CYLINDER_EXTENSION_NAME"/>
<type name="XrCompositionLayerCylinderKHR"/>
@@ -1988,7 +2042,7 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<!-- Non-core composition equilateral rect layer -->
<extension name="XR_KHR_composition_layer_equirect" number="19" type="instance" supported="openxr">
- <require comment="Types not directly used by the API">
+ <require>
<enum value="3" name="XR_KHR_composition_layer_equirect_SPEC_VERSION"/>
<enum value="&quot;XR_KHR_composition_layer_equirect&quot;" name="XR_KHR_COMPOSITION_LAYER_EQUIRECT_EXTENSION_NAME"/>
<type name="XrCompositionLayerEquirectKHR"/>
@@ -1999,14 +2053,13 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<!-- Debug Utilities extension -->
<extension name="XR_EXT_debug_utils" number="20" type="instance" supported="openxr">
<require>
- <enum value="2" name="XR_EXT_debug_utils_SPEC_VERSION"/>
+ <enum value="3" name="XR_EXT_debug_utils_SPEC_VERSION"/>
<enum value="&quot;XR_EXT_debug_utils&quot;" name="XR_EXT_DEBUG_UTILS_EXTENSION_NAME"/>
<enum offset="0" extends="XrStructureType" name="XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT"/>
<enum offset="1" extends="XrStructureType" name="XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT"/>
<enum offset="2" extends="XrStructureType" name="XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT"/>
<enum offset="3" extends="XrStructureType" name="XR_TYPE_DEBUG_UTILS_LABEL_EXT"/>
<enum offset="0" extends="XrObjectType" name="XR_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT" comment="XrDebugUtilsMessengerEXT"/>
- <enum offset="0" extends="XrResult" dir="-" name="XR_ERROR_DEBUG_UTILS_MESSENGER_INVALID_EXT"/>
<type name="PFN_xrDebugUtilsMessengerCallbackEXT"/>
<type name="XrDebugUtilsObjectNameInfoEXT"/>
<type name="XrDebugUtilsLabelEXT"/>
@@ -2041,7 +2094,7 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<!-- OpenGL graphics binding extension -->
<extension name="XR_KHR_opengl_enable" number="24" type="instance" protect="XR_USE_GRAPHICS_API_OPENGL" supported="openxr">
<require>
- <enum value="1" name="XR_KHR_opengl_enable_SPEC_VERSION"/>
+ <enum value="7" name="XR_KHR_opengl_enable_SPEC_VERSION"/>
<enum value="&quot;XR_KHR_opengl_enable&quot;" name="XR_KHR_OPENGL_ENABLE_EXTENSION_NAME"/>
<enum offset="0" extends="XrStructureType" name="XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR"/>
<enum offset="1" extends="XrStructureType" name="XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR"/>
@@ -2062,7 +2115,7 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<!-- OpenGL ES graphics binding extension -->
<extension name="XR_KHR_opengl_es_enable" number="25" type="instance" protect="XR_USE_GRAPHICS_API_OPENGL_ES" supported="openxr">
<require>
- <enum value="1" name="XR_KHR_opengl_es_enable_SPEC_VERSION"/>
+ <enum value="6" name="XR_KHR_opengl_es_enable_SPEC_VERSION"/>
<enum value="&quot;XR_KHR_opengl_es_enable&quot;" name="XR_KHR_OPENGL_ES_ENABLE_EXTENSION_NAME"/>
<enum offset="1" extends="XrStructureType" name="XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR"/>
<enum offset="2" extends="XrStructureType" name="XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR"/>
@@ -2092,25 +2145,18 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
</require>
</extension>
- <!-- D3D10 graphics binding extension -->
- <extension name="XR_KHR_D3D10_enable" number="27" type="instance" protect="XR_USE_GRAPHICS_API_D3D10" supported="openxr">
+ <!-- Value used by obsolete D3D10 graphics binding extension -->
+ <extension name="XR_KHR_D3D10_enable_obsolete" number="27" type="instance" supported="disabled">
<require>
- <enum value="1" name="XR_KHR_D3D10_enable_SPEC_VERSION"/>
- <enum value="&quot;XR_KHR_D3D10_enable&quot;" name="XR_KHR_D3D10_ENABLE_EXTENSION_NAME"/>
- <enum offset="0" extends="XrStructureType" name="XR_TYPE_GRAPHICS_BINDING_D3D10_KHR"/>
- <enum offset="1" extends="XrStructureType" name="XR_TYPE_SWAPCHAIN_IMAGE_D3D10_KHR"/>
- <enum offset="2" extends="XrStructureType" name="XR_TYPE_GRAPHICS_REQUIREMENTS_D3D10_KHR"/>
- <type name="XrGraphicsBindingD3D10KHR"/>
- <type name="XrSwapchainImageD3D10KHR"/>
- <type name="XrGraphicsRequirementsD3D10KHR"/>
- <command name="xrGetD3D10GraphicsRequirementsKHR"/>
+ <enum value="4" name="XR_KHR_D3D10_enable_obsolete_SPEC_VERSION"/>
+ <enum value="&quot;XR_KHR_D3D10_enable_obsolete&quot;" name="XR_KHR_D3D10_ENABLE_OBSOLETE_EXTENSION_NAME"/>
</require>
</extension>
<!-- D3D11 graphics binding extension -->
<extension name="XR_KHR_D3D11_enable" number="28" type="instance" protect="XR_USE_GRAPHICS_API_D3D11" supported="openxr">
<require>
- <enum value="1" name="XR_KHR_D3D11_enable_SPEC_VERSION"/>
+ <enum value="4" name="XR_KHR_D3D11_enable_SPEC_VERSION"/>
<enum value="&quot;XR_KHR_D3D11_enable&quot;" name="XR_KHR_D3D11_ENABLE_EXTENSION_NAME"/>
<enum offset="0" extends="XrStructureType" name="XR_TYPE_GRAPHICS_BINDING_D3D11_KHR"/>
<enum offset="1" extends="XrStructureType" name="XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR"/>
@@ -2125,7 +2171,7 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
<!-- D3D12 graphics binding extension -->
<extension name="XR_KHR_D3D12_enable" number="29" type="instance" protect="XR_USE_GRAPHICS_API_D3D12" supported="openxr">
<require>
- <enum value="1" name="XR_KHR_D3D12_enable_SPEC_VERSION"/>
+ <enum value="5" name="XR_KHR_D3D12_enable_SPEC_VERSION"/>
<enum value="&quot;XR_KHR_D3D12_enable&quot;" name="XR_KHR_D3D12_ENABLE_EXTENSION_NAME"/>
<enum offset="0" extends="XrStructureType" name="XR_TYPE_GRAPHICS_BINDING_D3D12_KHR"/>
<enum offset="1" extends="XrStructureType" name="XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR"/>
@@ -2146,17 +2192,17 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
</extension>
<!-- Reserved space for Eye tracking extension -->
- <extension name="XR_KHR_eye_tracking" number="31" type="instance" supported="disabled">
+ <extension name="XR_EXT_eye_tracking" number="31" type="instance" supported="disabled">
<require>
- <enum value="1" name="XR_KHR_eye_tracking_SPEC_VERSION"/>
- <enum value="&quot;XR_KHR_eye_tracking&quot;" name="XR_KHR_EYE_TRACKING_EXTENSION_NAME"/>
+ <enum value="1" name="XR_EXT_eye_tracking_SPEC_VERSION"/>
+ <enum value="&quot;XR_EXT_eye_tracking&quot;" name="XR_EXT_EYE_TRACKING_EXTENSION_NAME"/>
</require>
</extension>
<!-- Visibility mask extension -->
<extension name="XR_KHR_visibility_mask" number="32" type="instance" supported="openxr">
<require>
- <enum value="1" name="XR_KHR_visibility_mask_SPEC_VERSION"/>
+ <enum value="2" name="XR_KHR_visibility_mask_SPEC_VERSION"/>
<enum value="&quot;XR_KHR_visibility_mask&quot;" name="XR_KHR_VISIBILITY_MASK_EXTENSION_NAME"/>
<enum offset="0" extends="XrStructureType" name="XR_TYPE_VISIBILITY_MASK_KHR"/>
<enum offset="1" extends="XrStructureType" name="XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR"/>
@@ -2167,14 +2213,6 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
</require>
</extension>
- <!-- Reserved space for unnamed Google extension -->
- <extension name="XR_GOOGLE_extension_32" number="32" type="instance" supported="disabled">
- <require>
- <enum value="1" name="XR_GOOGLE_extension_32_SPEC_VERSION"/>
- <enum value="&quot;XR_GOOGLE_extension_32&quot;" name="XR_GOOGLE_EXTENSION_32_EXTENSION_NAME"/>
- </require>
- </extension>
-
<!-- Reserved space for EXT permissions support -->
<extension name="XR_EXT_permissions_support" number="33" type="instance" supported="disabled">
<require>
@@ -2191,13 +2229,11 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
</require>
</extension>
- <!-- Runtime support for additional per-layer color modulation info -->
+ <!-- Reserved space for additional per-layer color modulation info -->
<extension name="XR_KHR_composition_layer_color_modulation" number="35" type="instance" supported="disabled">
<require>
- <enum value="2" name="XR_KHR_composition_layer_color_modulation_SPEC_VERSION"/>
+ <enum value="4" name="XR_KHR_composition_layer_color_modulation_SPEC_VERSION"/>
<enum value="&quot;XR_KHR_composition_layer_color_modulation&quot;" name="XR_KHR_COMPOSITION_LAYER_COLOR_MODULATION_EXTENSION_NAME"/>
- <type name="XrCompositionLayerColorModulationInfoKHR"/>
- <enum offset="0" extends="XrStructureType" name="XR_TYPE_COMPOSITION_LAYER_COLOR_MODULATION_INFO_KHR"/>
</require>
</extension>
@@ -2219,5 +2255,27 @@ maintained in the master branch of the Khronos OpenXR GitHub project.
</require>
</extension>
+ <extension name="XR_VARJO_quad_views" number="38" type="instance" supported="openxr">
+ <require>
+ <enum value="1" name="XR_VARJO_quad_views_SPEC_VERSION"/>
+ <enum value="&quot;XR_VARJO_quad_views&quot;" name="XR_VARJO_QUAD_VIEWS_EXTENSION_NAME"/>
+ <enum offset="0" extends="XrViewConfigurationType" name="XR_VIEW_CONFIGURATION_TYPE_PRIMARY_QUAD_VARJO"/>
+ </require>
+ </extension>
+
+ <extension name="XR_MSFT_unbounded_reference_space" number="39" type="instance" supported="disabled">
+ <require>
+ <enum value="1" name="XR_MSFT_unbounded_reference_space_SPEC_VERSION"/>
+ <enum value="&quot;XR_MSFT_unbounded_reference_space&quot;" name="XR_MSFT_UNBOUNDED_REFERENCE_SPACE_EXTENSION_NAME"/>
+ </require>
+ </extension>
+
+ <extension name="XR_MSFT_spatial_anchor" number="40" type="instance" supported="disabled">
+ <require>
+ <enum value="1" name="XR_MSFT_spatial_anchor_SPEC_VERSION"/>
+ <enum value="&quot;XR_MSFT_spatial_anchor&quot;" name="XR_MSFT_SPATIAL_ANCHOR_EXTENSION_NAME"/>
+ </require>
+ </extension>
+
</extensions>
</registry>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment