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