|
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. |