QCOM_frame_extrapolation

Name

QCOM_frame_extrapolation

Name Strings

GL_QCOM_frame_extrapolation

Contributors

Sam Holmes
Jonathan Wicks

Contacts

Jeff Leger  <jleger@qti.qualcomm.com>

Status

Complete

Version

Last Modified Date: November 30, 2020
Revision: 1.0

Number

OpenGL ES Extension #333

Dependencies

Requires OpenGL ES 2.0

This extension is written based on the wording of the OpenGL ES 3.2
Specification.

Overview

Frame extrapolation is the process of producing a new, future frame
based on the contents of two previously rendered frames. It may be
used to produce high frame rate display updates without incurring the
full cost of traditional rendering at the higher framerate.

This extension adds support for frame extrapolation in OpenGL ES by
adding a function which takes three textures. The first two are used
in sequence as the source frames, from which the extrapolated frame
is derived. The extrapolated frame is stored in the third texture.

New Procedures and Functions

void ExtrapolateTex2DQCOM(uint  src1,
                          uint  src2,
                          uint  output,
                          float scaleFactor);

Additions to Chapter 8 of the OpenGL ES 3.2 Specification

8.24 Frame Extrapolation

The command

void ExtrapolateTex2DQCOM(uint src1, uint src2,
uint output, float scaleFactor);

is used to produce an extrapolated frame based on the contents of
two previous frames. <src1> and <src2> specify the two previously
rendered frames, in order, which will be used as the basis of the
extrapolation. The three textures provided must have the same
dimensions and format. While <src1>, <src2> and <output> can
have multiple levels the implementation only reads from or writes
to the base level.

The texture contents provided in the two source textures represent
frame contents at two points in time. <scaleFactor> defines the amount
of time into the future the extrapolation is to target, based on the
delta in time between the two source textures.

For example, a value of 1.0 for <scaleFactor> will produce an
extrapolated frame that is as far into the future beyond 'src2'
as the time delta between 'src1' and 'src2'. A value of 0.5
for 'scaleFactor' targets a time that is a half step in the
future (compared to the full step delta between the two source frames).

Specifying an accurate scale factor is important for producing smooth
animation. An application that is displaying to the user alternating
rendered and extrapolated frames would use a scale factor of 0.5 so
that the extrapolated frame has contents which fall halfways between the
last rendered frame and the next rendered frame to come in the future.
Negative <scaleFactor> values produce frames targeting times before
that represented by the contents of <src2>.

Table 8.28: Compatible formats for <src1>, <src2> and <output>

    Internal Format
    ---------------
    RGBA8
    RGB8
    R8
    RGBA16F
    RGB16F
    RGBA32F
    RGB32F

Errors

INVALID_VALUE is generated if scaleFactor is equal to 0.

INVALID_OPERATION is generated if the texture formats of src1, src2 and
output are not identical.

INVALID_OPERATION is generated if the texture dimensions of src1, src2
and output are not identical.

INVALID_OPERATION is generated if the texture formats of src1, src2 and
output are not one of the formats listed in table 8.28.

Issues

(1) Why is the extrapolation quality not defined?

Resolved: The intention of this specification is to extrapolate a new
texture based on the two input textures. Implementations should aim to
produce the highest quality extrapolation but since the results are
extrapolations there are no prescribed steps for how the textures must
be generated.

Revision History

  Rev.  Date        Author    Changes
  ----  ----------  --------  -----------------------------------------
  0.1   11/21/2019  Sam       Initial draft
  1.0   11/30/2020  Tate      Official extension number