C Specification

The XrFutureStateEXT enumerates the possible future lifecycle states:

// Provided by XR_EXT_future
typedef enum XrFutureStateEXT {
    XR_FUTURE_STATE_PENDING_EXT = 1,
    XR_FUTURE_STATE_READY_EXT = 2,
    XR_FUTURE_STATE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrFutureStateEXT;

Description

Enumerant Descriptions
  • XR_FUTURE_STATE_PENDING_EXT. The state of a future that is waiting for the async operation to conclude. This is typically the initial state of a future returned from an async function.

  • XR_FUTURE_STATE_READY_EXT. The state of a future when the result of the async operation is ready. The application can retrieve the result by calling the associated completion function.

PENDINGxrFooAsyncREADYAsync operation completesxrCancelFutureEXTxrFooCompletexrCancelFutureEXTxrDestroy* associated handleAsync operation is completes immediatelyInvalid
Figure 1. XrFutureEXT Lifecycle

A future that is not invalidated (or completed) may be in one of two states, Pending and Ready, represented by XR_FUTURE_STATE_PENDING_EXT and XR_FUTURE_STATE_READY_EXT respectively.

  • When successfully returned from an async function the future starts out as Pending. In this state the future may be polled, but must not be passed to a completion function. Applications should wait for the future to become ready and keep polling the state of the future. If a pending future is passed to the associated completion function, it must return XR_ERROR_FUTURE_PENDING_EXT.

  • Once the asynchronous operation succeeds or fails, the state of the future moves to Ready. In the ready state the future may be "Completed" with the Complete function. See https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#ext_future-completing.

  • After being successfully completed, the future becomes invalidated if the completion function returns a success code, and in the case of two-call idioms, the array was not NULL.

  • After a call to xrCancelFutureEXT, the future becomes invalidated immediately and any resources associated with it may be freed (including handles)

  • When the associated handle is destroyed, the futures become invalidated. See https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#ext_future-scope.

A future returned from an async function must be in either the state XR_FUTURE_STATE_PENDING_EXT or XR_FUTURE_STATE_READY_EXT. A runtime may skip the Pending state and go directly to Ready if the result is immediately available.

See Also

Document Notes

For more information, see the OpenXR Specification

This page is extracted from the OpenXR Specification. Fixes and changes should be made to the Specification, not directly.

Copyright 2014-2025 The Khronos Group Inc.