15bd8deadSopenharmony_ciName
25bd8deadSopenharmony_ci
35bd8deadSopenharmony_ci    QCOM_frame_extrapolation
45bd8deadSopenharmony_ci
55bd8deadSopenharmony_ciName Strings
65bd8deadSopenharmony_ci
75bd8deadSopenharmony_ci    GL_QCOM_frame_extrapolation
85bd8deadSopenharmony_ci
95bd8deadSopenharmony_ciContributors
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ci    Sam Holmes
125bd8deadSopenharmony_ci    Jonathan Wicks
135bd8deadSopenharmony_ci
145bd8deadSopenharmony_ciContacts
155bd8deadSopenharmony_ci
165bd8deadSopenharmony_ci    Jeff Leger  <jleger@qti.qualcomm.com>
175bd8deadSopenharmony_ci
185bd8deadSopenharmony_ciStatus
195bd8deadSopenharmony_ci
205bd8deadSopenharmony_ci    Complete
215bd8deadSopenharmony_ci
225bd8deadSopenharmony_ciVersion
235bd8deadSopenharmony_ci
245bd8deadSopenharmony_ci    Last Modified Date: November 30, 2020
255bd8deadSopenharmony_ci    Revision: 1.0
265bd8deadSopenharmony_ci
275bd8deadSopenharmony_ciNumber
285bd8deadSopenharmony_ci
295bd8deadSopenharmony_ci    OpenGL ES Extension #333
305bd8deadSopenharmony_ci
315bd8deadSopenharmony_ciDependencies
325bd8deadSopenharmony_ci
335bd8deadSopenharmony_ci    Requires OpenGL ES 2.0
345bd8deadSopenharmony_ci
355bd8deadSopenharmony_ci    This extension is written based on the wording of the OpenGL ES 3.2
365bd8deadSopenharmony_ci    Specification.
375bd8deadSopenharmony_ci
385bd8deadSopenharmony_ciOverview
395bd8deadSopenharmony_ci
405bd8deadSopenharmony_ci    Frame extrapolation is the process of producing a new, future frame
415bd8deadSopenharmony_ci    based on the contents of two previously rendered frames. It may be
425bd8deadSopenharmony_ci    used to produce high frame rate display updates without incurring the
435bd8deadSopenharmony_ci    full cost of traditional rendering at the higher framerate.
445bd8deadSopenharmony_ci
455bd8deadSopenharmony_ci    This extension adds support for frame extrapolation in OpenGL ES by
465bd8deadSopenharmony_ci    adding a function which takes three textures. The first two are used
475bd8deadSopenharmony_ci    in sequence as the source frames, from which the extrapolated frame
485bd8deadSopenharmony_ci    is derived. The extrapolated frame is stored in the third texture.
495bd8deadSopenharmony_ci
505bd8deadSopenharmony_ciNew Procedures and Functions
515bd8deadSopenharmony_ci
525bd8deadSopenharmony_ci    void ExtrapolateTex2DQCOM(uint  src1,
535bd8deadSopenharmony_ci                              uint  src2,
545bd8deadSopenharmony_ci                              uint  output,
555bd8deadSopenharmony_ci                              float scaleFactor);
565bd8deadSopenharmony_ci
575bd8deadSopenharmony_ciAdditions to Chapter 8 of the OpenGL ES 3.2 Specification
585bd8deadSopenharmony_ci
595bd8deadSopenharmony_ci    8.24 Frame Extrapolation
605bd8deadSopenharmony_ci
615bd8deadSopenharmony_ci    The command
625bd8deadSopenharmony_ci
635bd8deadSopenharmony_ci    void ExtrapolateTex2DQCOM(uint src1, uint src2,
645bd8deadSopenharmony_ci    uint output, float scaleFactor);
655bd8deadSopenharmony_ci
665bd8deadSopenharmony_ci    is used to produce an extrapolated frame based on the contents of
675bd8deadSopenharmony_ci    two previous frames. <src1> and <src2> specify the two previously
685bd8deadSopenharmony_ci    rendered frames, in order, which will be used as the basis of the
695bd8deadSopenharmony_ci    extrapolation. The three textures provided must have the same
705bd8deadSopenharmony_ci    dimensions and format. While <src1>, <src2> and <output> can
715bd8deadSopenharmony_ci    have multiple levels the implementation only reads from or writes
725bd8deadSopenharmony_ci    to the base level.
735bd8deadSopenharmony_ci
745bd8deadSopenharmony_ci    The texture contents provided in the two source textures represent
755bd8deadSopenharmony_ci    frame contents at two points in time. <scaleFactor> defines the amount
765bd8deadSopenharmony_ci    of time into the future the extrapolation is to target, based on the
775bd8deadSopenharmony_ci    delta in time between the two source textures.
785bd8deadSopenharmony_ci
795bd8deadSopenharmony_ci    For example, a value of 1.0 for <scaleFactor> will produce an
805bd8deadSopenharmony_ci    extrapolated frame that is as far into the future beyond 'src2'
815bd8deadSopenharmony_ci    as the time delta between 'src1' and 'src2'. A value of 0.5
825bd8deadSopenharmony_ci    for 'scaleFactor' targets a time that is a half step in the
835bd8deadSopenharmony_ci    future (compared to the full step delta between the two source frames).
845bd8deadSopenharmony_ci
855bd8deadSopenharmony_ci    Specifying an accurate scale factor is important for producing smooth
865bd8deadSopenharmony_ci    animation. An application that is displaying to the user alternating
875bd8deadSopenharmony_ci    rendered and extrapolated frames would use a scale factor of 0.5 so
885bd8deadSopenharmony_ci    that the extrapolated frame has contents which fall halfways between the
895bd8deadSopenharmony_ci    last rendered frame and the next rendered frame to come in the future.
905bd8deadSopenharmony_ci    Negative <scaleFactor> values produce frames targeting times before
915bd8deadSopenharmony_ci    that represented by the contents of <src2>.
925bd8deadSopenharmony_ci
935bd8deadSopenharmony_ci    Table 8.28: Compatible formats for <src1>, <src2> and <output>
945bd8deadSopenharmony_ci
955bd8deadSopenharmony_ci        Internal Format
965bd8deadSopenharmony_ci        ---------------
975bd8deadSopenharmony_ci        RGBA8
985bd8deadSopenharmony_ci        RGB8
995bd8deadSopenharmony_ci        R8
1005bd8deadSopenharmony_ci        RGBA16F
1015bd8deadSopenharmony_ci        RGB16F
1025bd8deadSopenharmony_ci        RGBA32F
1035bd8deadSopenharmony_ci        RGB32F
1045bd8deadSopenharmony_ci
1055bd8deadSopenharmony_ciErrors
1065bd8deadSopenharmony_ci
1075bd8deadSopenharmony_ci    INVALID_VALUE is generated if scaleFactor is equal to 0.
1085bd8deadSopenharmony_ci
1095bd8deadSopenharmony_ci    INVALID_OPERATION is generated if the texture formats of src1, src2 and
1105bd8deadSopenharmony_ci    output are not identical.
1115bd8deadSopenharmony_ci
1125bd8deadSopenharmony_ci    INVALID_OPERATION is generated if the texture dimensions of src1, src2
1135bd8deadSopenharmony_ci    and output are not identical.
1145bd8deadSopenharmony_ci
1155bd8deadSopenharmony_ci    INVALID_OPERATION is generated if the texture formats of src1, src2 and
1165bd8deadSopenharmony_ci    output are not one of the formats listed in table 8.28.
1175bd8deadSopenharmony_ci
1185bd8deadSopenharmony_ciIssues
1195bd8deadSopenharmony_ci
1205bd8deadSopenharmony_ci    (1) Why is the extrapolation quality not defined?
1215bd8deadSopenharmony_ci
1225bd8deadSopenharmony_ci    Resolved: The intention of this specification is to extrapolate a new
1235bd8deadSopenharmony_ci    texture based on the two input textures. Implementations should aim to
1245bd8deadSopenharmony_ci    produce the highest quality extrapolation but since the results are
1255bd8deadSopenharmony_ci    extrapolations there are no prescribed steps for how the textures must
1265bd8deadSopenharmony_ci    be generated.
1275bd8deadSopenharmony_ci
1285bd8deadSopenharmony_ciRevision History
1295bd8deadSopenharmony_ci
1305bd8deadSopenharmony_ci      Rev.  Date        Author    Changes
1315bd8deadSopenharmony_ci      ----  ----------  --------  -----------------------------------------
1325bd8deadSopenharmony_ci      0.1   11/21/2019  Sam       Initial draft
1335bd8deadSopenharmony_ci      1.0   11/30/2020  Tate      Official extension number
134