blob: b185217e4ff4007d1007caf01e958b35e9ce5b66 [file] [log] [blame]
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