C Specification
The XrFrameSynthesisInfoEXT structure is defined as:
// Provided by XR_EXT_frame_synthesis
typedef struct XrFrameSynthesisInfoEXT {
    XrStructureType                 type;
    const void*                     next;
    XrFrameSynthesisInfoFlagsEXT    layerFlags;
    XrSwapchainSubImage             motionVectorSubImage;
    XrVector4f                      motionVectorScale;
    XrVector4f                      motionVectorOffset;
    XrPosef                         appSpaceDeltaPose;
    XrSwapchainSubImage             depthSubImage;
    float                           minDepth;
    float                           maxDepth;
    float                           nearZ;
    float                           farZ;
} XrFrameSynthesisInfoEXT;Members
Description
When submitting motion vector images and depth images along with projection
layers, add an XrFrameSynthesisInfoEXT structure to the
XrCompositionLayerProjectionView::next chain, for each
XrCompositionLayerProjectionView structure in the given layer.
The runtime must interpret the motion vector data in the
motionVectorSubImage’s RGB channels, modified by
motionVectorScale and motionVectorOffset as follows:
motionVector = motionVectorSubImagergb * motionVectorScalexyz
+  motionVectorOffsetxyz.
The components motionVectorSubImagea, motionVectorScalew and
motionVectorOffsetw are ignored.
The motion vector represents the movement of a pixel since the XrFrameEndInfo::displayTime of the previous frame until the XrFrameEndInfo::displayTime of the current frame. The runtime may use this information to extrapolate the rendered frame into a future frame.
The motion vector must derived from normalized device coordinate (NDC) space, which in this context uses Vulkan-style conventions: the NDC range is defined as [-1, -1, 0] to [1, 1, 1], different from OpenGL’s NDC range. However, the motion vector itself is not constrained to this range; its values depend on the pixel’s movement and may extend beyond the boundaries of the NDC space. For example, given that a pixel’s NDC in the previous frame is PrevNDC, and CurrNDC in current frame, and that there is no scale or offset, then the motion vector value is "(CurrNDC - PrevNDC)xyz".
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
Copyright 2014-2025 The Khronos Group Inc.
This work is licensed under a Creative Commons Attribution 4.0 International License.