15bd8deadSopenharmony_ciName 25bd8deadSopenharmony_ci 35bd8deadSopenharmony_ci IMG_tile_region_protection 45bd8deadSopenharmony_ci 55bd8deadSopenharmony_ciName Strings 65bd8deadSopenharmony_ci 75bd8deadSopenharmony_ci GL_IMG_tile_region_protection 85bd8deadSopenharmony_ci 95bd8deadSopenharmony_ciContact 105bd8deadSopenharmony_ci 115bd8deadSopenharmony_ci Deepak Ravikumar, Imagination Technologies 125bd8deadSopenharmony_ci (deepak 'dot' ravikumar 'at' imgtec 'dot' com) 135bd8deadSopenharmony_ci 145bd8deadSopenharmony_ciContributors 155bd8deadSopenharmony_ci 165bd8deadSopenharmony_ci Ian King, Imagination Technologies 175bd8deadSopenharmony_ci (Ian 'dot' King 'at' imgtec 'dot' com) 185bd8deadSopenharmony_ci 195bd8deadSopenharmony_ciStatus 205bd8deadSopenharmony_ci 215bd8deadSopenharmony_ci Complete. 225bd8deadSopenharmony_ci 235bd8deadSopenharmony_ciVersion 245bd8deadSopenharmony_ci 255bd8deadSopenharmony_ci Last Modified Date: June 06, 2022 265bd8deadSopenharmony_ci Revision: 1.0 275bd8deadSopenharmony_ci 285bd8deadSopenharmony_ciNumber 295bd8deadSopenharmony_ci 305bd8deadSopenharmony_ci OpenGL SC Extension #1 315bd8deadSopenharmony_ci 325bd8deadSopenharmony_ciDependencies 335bd8deadSopenharmony_ci 345bd8deadSopenharmony_ci This extension is written against the OpenGL SC 2.0.1 355bd8deadSopenharmony_ci specification, EGL Version 1.4 specification and the 365bd8deadSopenharmony_ci GLSL ES Shading Language 1.00 specification with limitations as 375bd8deadSopenharmony_ci specified in Appendix F of the OpenGL SC 2.0.1 specification. 385bd8deadSopenharmony_ci 395bd8deadSopenharmony_ciOverview 405bd8deadSopenharmony_ci 415bd8deadSopenharmony_ci The safety-critical geometric primitives should have safety 425bd8deadSopenharmony_ci mechanisms to guard them against faults that may result in pixel 435bd8deadSopenharmony_ci corruption. On Imagination Technologies safety-critical Tile Based 445bd8deadSopenharmony_ci rendering GPUs, Tile Region Protection (TRP) safety mechanism 455bd8deadSopenharmony_ci performs safety integrity checks on all tiles that contain 465bd8deadSopenharmony_ci safety-critical geometries and detect faults in the rendering of 475bd8deadSopenharmony_ci these elements. This extension allows application to tag all its 485bd8deadSopenharmony_ci safety-critical geometric primitives as safety-related so as to run 495bd8deadSopenharmony_ci TRP safety checks on them and report faults in their rendering. 505bd8deadSopenharmony_ci Any faults reported by this extension can then be acted upon by the 515bd8deadSopenharmony_ci application. Depending on the hardware. TRP can detect either 525bd8deadSopenharmony_ci transient or both transient and permanent faults that occur during 535bd8deadSopenharmony_ci the rendering of these safety-critical elements. 545bd8deadSopenharmony_ci 555bd8deadSopenharmony_ci This extension provides application a way to specify all its 565bd8deadSopenharmony_ci safety-critical geometric primitives in order to enable the TRP 575bd8deadSopenharmony_ci safety integrity checks on them, and thereby detect and report 585bd8deadSopenharmony_ci faults in their rendering. 595bd8deadSopenharmony_ci 605bd8deadSopenharmony_ci This extension also adds a read-only built-in boolean 615bd8deadSopenharmony_ci gl_TRPIsProtected, to be used in the fragment shader to check if 625bd8deadSopenharmony_ci the tile is protected by TRP or not. This built-in allows 635bd8deadSopenharmony_ci developers to verify that all of the safety-critical geometric 645bd8deadSopenharmony_ci primitives are indeed protected by TRP. Shaders using the new 655bd8deadSopenharmony_ci functionality provided by this extension should enable this via 665bd8deadSopenharmony_ci the construct, 675bd8deadSopenharmony_ci 685bd8deadSopenharmony_ci #extension GL_IMG_tile_region_protection : require (or enable) 695bd8deadSopenharmony_ci 705bd8deadSopenharmony_ciIP Status 715bd8deadSopenharmony_ci 725bd8deadSopenharmony_ci Imagination Technologies Proprietary 735bd8deadSopenharmony_ci 745bd8deadSopenharmony_ciNew Procedures and Functions 755bd8deadSopenharmony_ci 765bd8deadSopenharmony_ci None 775bd8deadSopenharmony_ci 785bd8deadSopenharmony_ciNew Types 795bd8deadSopenharmony_ci 805bd8deadSopenharmony_ci None 815bd8deadSopenharmony_ci 825bd8deadSopenharmony_ciNew Tokens 835bd8deadSopenharmony_ci 845bd8deadSopenharmony_ci Accepted by the <cap> parameter of Enable and Disable, 855bd8deadSopenharmony_ci <value> parameter of IsEnabled and by the <pname> parameter 865bd8deadSopenharmony_ci of GetBooleanv 875bd8deadSopenharmony_ci 885bd8deadSopenharmony_ci GL_TRP_IMG 0x8EA0 895bd8deadSopenharmony_ci 905bd8deadSopenharmony_ci Returned by GetGraphicsResetStatus 915bd8deadSopenharmony_ci 925bd8deadSopenharmony_ci GL_TRP_ERROR_CONTEXT_RESET_IMG 0x8EA1 935bd8deadSopenharmony_ci 945bd8deadSopenharmony_ci Returned by GetError 955bd8deadSopenharmony_ci 965bd8deadSopenharmony_ci GL_TRP_UNSUPPORTED_CONTEXT_IMG 0x8EA2 975bd8deadSopenharmony_ci 985bd8deadSopenharmony_ci 995bd8deadSopenharmony_ciAdditions to Chapter 2 of the OpenGL SC 2.0.1 Specification 1005bd8deadSopenharmony_ci(OpenGL SC Operation) 1015bd8deadSopenharmony_ci 1025bd8deadSopenharmony_ci Section 2.6 Graphics Reset Recovery Add below to the values 1035bd8deadSopenharmony_ci that can be returned by GetGraphicsResetStatus 1045bd8deadSopenharmony_ci 1055bd8deadSopenharmony_ci TRP_ERROR_CONTEXT_RESET_IMG indicates that a reset has been detected 1065bd8deadSopenharmony_ci due to a fault detected by TRP in a safety-critical render in the 1075bd8deadSopenharmony_ci current GL context. 1085bd8deadSopenharmony_ci 1095bd8deadSopenharmony_ci 1105bd8deadSopenharmony_ci Table 2.3 Summary of GL errors add the below entry 1115bd8deadSopenharmony_ci 1125bd8deadSopenharmony_ci Error Description Offending 1135bd8deadSopenharmony_ci command 1145bd8deadSopenharmony_ci ignored? Advisory Action 1155bd8deadSopenharmony_ci ------------------- ----------- ----- ------------------- 1165bd8deadSopenharmony_ci TRP_UNSUPPORTED_CONTEXT_IMG TRP enable Yes Continue for 1175bd8deadSopenharmony_ci failed due to non safety-critical 1185bd8deadSopenharmony_ci context not renders. 1195bd8deadSopenharmony_ci supporting Abort for 1205bd8deadSopenharmony_ci robust buffer safety-critical 1215bd8deadSopenharmony_ci and/or has renders. 1225bd8deadSopenharmony_ci reset notifi- 1235bd8deadSopenharmony_ci cation other 1245bd8deadSopenharmony_ci than 1255bd8deadSopenharmony_ci LOSE_CONTEXT_ON_RESET 1265bd8deadSopenharmony_ci 1275bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL SC 2.0.1 Specification 1285bd8deadSopenharmony_ci(Per-Fragment Operations and the Frame Buffer) 1295bd8deadSopenharmony_ci 1305bd8deadSopenharmony_ci Add Section 4.1.9 Tile Region Protection(TRP) after 1315bd8deadSopenharmony_ci 4.1.8 "Additional Multisample Fragment Operations" 1325bd8deadSopenharmony_ci 1335bd8deadSopenharmony_ci Tile Region Protection performs safety checks during the 1345bd8deadSopenharmony_ci rendering of safety-critical geometric primitives, to protect them 1355bd8deadSopenharmony_ci from faults that may otherwise cause pixel data corruption and 1365bd8deadSopenharmony_ci result in the safety-critical elements being rendered incorrectly. 1375bd8deadSopenharmony_ci Depending on the hardware,TRP can detect either transient or both 1385bd8deadSopenharmony_ci transient and permanent faults that occur during the rendering of 1395bd8deadSopenharmony_ci these safety-critical elements. 1405bd8deadSopenharmony_ci 1415bd8deadSopenharmony_ci TRP is enabled with the generic Enable command using the 1425bd8deadSopenharmony_ci symbolic constant TRP_IMG before passing the safety-critical 1435bd8deadSopenharmony_ci sequence of geometric primitives to the GL. Once TRP is enabled, 1445bd8deadSopenharmony_ci all further sequence of geometric primitives passed to the GL are 1455bd8deadSopenharmony_ci treated as safety-critical. It can be disabled with the Disable 1465bd8deadSopenharmony_ci command using the same symbolic constant for the non safety-critical 1475bd8deadSopenharmony_ci geometric primitives. 1485bd8deadSopenharmony_ci 1495bd8deadSopenharmony_ci TRP runs safety integrity checks during the rendering of the 1505bd8deadSopenharmony_ci specified safety-critical geometries. Any fault detected by TRP in 1515bd8deadSopenharmony_ci the rendering of these elements will result in a reset of the GL 1525bd8deadSopenharmony_ci context and any subsequent GL commands on that context will 1535bd8deadSopenharmony_ci generate a CONTEXT_LOST error. In this case, GetGraphicsResetStatus 1545bd8deadSopenharmony_ci will return the value TRP_ERROR_CONTEXT_RESET_IMG. 1555bd8deadSopenharmony_ci 1565bd8deadSopenharmony_ci TRP requires a graphic context with reset notification strategy 1575bd8deadSopenharmony_ci set to LOSE_CONTEXT_ON_RESET and robust buffer access enabled 1585bd8deadSopenharmony_ci with CONTEXT_ROBUST_ACCESS_EXT set to True. 1595bd8deadSopenharmony_ci GL_TRP_UNSUPPORTED_CONTEXT_IMG error is generated if TRP is 1605bd8deadSopenharmony_ci enabled for a graphics context that does not have robust buffer 1615bd8deadSopenharmony_ci access enabled (OPENGL_ROBUST_ACCESS_EXT set to False) or 1625bd8deadSopenharmony_ci that has reset notification strategy set to a value other than 1635bd8deadSopenharmony_ci LOSE_CONTEXT_ON_RESET 1645bd8deadSopenharmony_ci 1655bd8deadSopenharmony_ci 1665bd8deadSopenharmony_ciAdditions to Chapter 6 of the OpenGL SC 2.0.1 Specification 1675bd8deadSopenharmony_ci(State and State Requests) 1685bd8deadSopenharmony_ci 1695bd8deadSopenharmony_ci Table 6.11. Pixel Operations (cont.) add the below entry 1705bd8deadSopenharmony_ci 1715bd8deadSopenharmony_ci Initial 1725bd8deadSopenharmony_ci Get Value Type Get Command Value Description Section 1735bd8deadSopenharmony_ci ------------------- ---- ----------- ------ ------------------- ------- 1745bd8deadSopenharmony_ci TRP_IMG B IsEnabled False Tile Region Protection 4.1.9 1755bd8deadSopenharmony_ci enabled 1765bd8deadSopenharmony_ci 1775bd8deadSopenharmony_ci 1785bd8deadSopenharmony_ciAdditions to Chapter 7 of the OpenGL Shading Language 1.00 Specification 1795bd8deadSopenharmony_ci(Built-in Variables) 1805bd8deadSopenharmony_ci 1815bd8deadSopenharmony_ci Added new built-in boolean to 7.2 Fragment Shader Special Variables 1825bd8deadSopenharmony_ci with the below description. 1835bd8deadSopenharmony_ci 1845bd8deadSopenharmony_ci The fragment shader has access to the read-only built-in variable 1855bd8deadSopenharmony_ci gl_TRPIsProtected whose value is true for all fragments with window 1865bd8deadSopenharmony_ci relative coordinates falling inside a protected tile. At least one 1875bd8deadSopenharmony_ci square of an integer grid in window coordinates which are part of a 1885bd8deadSopenharmony_ci protected tile occupied by a geometric primitive is protected by 1895bd8deadSopenharmony_ci TRP safety checks. 1905bd8deadSopenharmony_ci 1915bd8deadSopenharmony_ci The built-in variables that are accessible from a fragment shader 1925bd8deadSopenharmony_ci are intrinsically given types as follows: 1935bd8deadSopenharmony_ci 1945bd8deadSopenharmony_ci mediump vec4 gl_FragCoord; 1955bd8deadSopenharmony_ci bool gl_FrontFacing; 1965bd8deadSopenharmony_ci mediump vec4 gl_FragColor; 1975bd8deadSopenharmony_ci mediump vec4 gl_FragData[gl_MaxDrawBuffers]; 1985bd8deadSopenharmony_ci mediump vec2 gl_PointCoord; 1995bd8deadSopenharmony_ci bool gl_TRPIsProtected; 2005bd8deadSopenharmony_ci 2015bd8deadSopenharmony_ciDependencies on GL and ES profiles, versions, and other extensions 2025bd8deadSopenharmony_ci 2035bd8deadSopenharmony_ci None 2045bd8deadSopenharmony_ci 2055bd8deadSopenharmony_ciErrors 2065bd8deadSopenharmony_ci 2075bd8deadSopenharmony_ci TRP_UNSUPPORTED_CONTEXT_IMG error is generated if TRP is enabled for 2085bd8deadSopenharmony_ci a graphic context for which the reset notification strategy 2095bd8deadSopenharmony_ci RESET_NOTIFICATION_STRATEGY_EXT is not LOSE_CONTEXT_ON_RESET and 2105bd8deadSopenharmony_ci robust buffer access CONTEXT_ROBUST_ACCESS is false. 2115bd8deadSopenharmony_ci 2125bd8deadSopenharmony_ciNew State 2135bd8deadSopenharmony_ci 2145bd8deadSopenharmony_ci Table 6.11. Pixel Operations (cont.) add the below entry 2155bd8deadSopenharmony_ci 2165bd8deadSopenharmony_ci Initial 2175bd8deadSopenharmony_ci Get Value Type Get Command Value Description Section 2185bd8deadSopenharmony_ci ------------------- ---- ----------- ------ ------------------- ------- 2195bd8deadSopenharmony_ci TRP_IMG B IsEnabled False Tile Region Protection 4.1.9 2205bd8deadSopenharmony_ci enabled 2215bd8deadSopenharmony_ci 2225bd8deadSopenharmony_ciNew Implementation Dependent State 2235bd8deadSopenharmony_ci 2245bd8deadSopenharmony_ci None 2255bd8deadSopenharmony_ci 2265bd8deadSopenharmony_ciSample Code 2275bd8deadSopenharmony_ci 2285bd8deadSopenharmony_ci The below code snippet illustrates the usage of this extension to 2295bd8deadSopenharmony_ci protect safety-critical sequence of geometric primitives. 2305bd8deadSopenharmony_ci 2315bd8deadSopenharmony_ci /* Step 1 Enable TRP */ 2325bd8deadSopenharmony_ci glEnable(GL_TRP_IMG); 2335bd8deadSopenharmony_ci GLenum error = glGetError(); 2345bd8deadSopenharmony_ci if (error == (GLenum)GL_NO_ERROR) 2355bd8deadSopenharmony_ci { 2365bd8deadSopenharmony_ci /* Step 2 Submit commands for rendering the 2375bd8deadSopenharmony_ci * safety-critical sequence of geometric primitives. 2385bd8deadSopenharmony_ci */ 2395bd8deadSopenharmony_ci ... 2405bd8deadSopenharmony_ci } 2415bd8deadSopenharmony_ci 2425bd8deadSopenharmony_ci /* Step 3 Disable TRP before submitting the 2435bd8deadSopenharmony_ci * non safety-critical sequence of geometric primitives to GL. 2445bd8deadSopenharmony_ci */ 2455bd8deadSopenharmony_ci glDisable(GL_TRP_IMG); 2465bd8deadSopenharmony_ci ... 2475bd8deadSopenharmony_ci /* End of non-safety critical geometry submission */ 2485bd8deadSopenharmony_ci 2495bd8deadSopenharmony_ci /* Step 4 Upon completion of the submitted commands to GL, 2505bd8deadSopenharmony_ci * check status of the safety-critical renders 2515bd8deadSopenharmony_ci */ 2525bd8deadSopenharmony_ci error = glGetError(); 2535bd8deadSopenharmony_ci if (error == (GLenum)GL_CONTEXT_LOST) 2545bd8deadSopenharmony_ci { 2555bd8deadSopenharmony_ci GLenum graphicResetReason = glGetGraphicsResetStatus(); 2565bd8deadSopenharmony_ci if (graphicResetReason == (GLenum)GL_TRP_ERROR_CONTEXT_RESET_IMG) 2575bd8deadSopenharmony_ci { 2585bd8deadSopenharmony_ci /* Step 4.5 Handle fault detected by TRP in 2595bd8deadSopenharmony_ci * safety-critical render 2605bd8deadSopenharmony_ci */ 2615bd8deadSopenharmony_ci } 2625bd8deadSopenharmony_ci } 2635bd8deadSopenharmony_ci 2645bd8deadSopenharmony_ci The fragment shader code snippet below illustrates how to identify 2655bd8deadSopenharmony_ci if the tile is protected by TRP safety checks or not. 2665bd8deadSopenharmony_ci 2675bd8deadSopenharmony_ci #extension GL_IMG_tile_region_protection : enable 2685bd8deadSopenharmony_ci 2695bd8deadSopenharmony_ci void main() 2705bd8deadSopenharmony_ci { 2715bd8deadSopenharmony_ci outColour.rgb = vec3(0.0,1.0,0.0); 2725bd8deadSopenharmony_ci /* Overlay safety protected tiles with green colour */ 2735bd8deadSopenharmony_ci outColour.a = gl_TRPIsProtected ? 0.5 : 0.0; 2745bd8deadSopenharmony_ci } 2755bd8deadSopenharmony_ci 2765bd8deadSopenharmony_ciConformance Tests 2775bd8deadSopenharmony_ci 2785bd8deadSopenharmony_ci GL2ExtensionTests/img_trp 2795bd8deadSopenharmony_ci 2805bd8deadSopenharmony_ciIssues 2815bd8deadSopenharmony_ci 2825bd8deadSopenharmony_ci 1) What should the default state of TRP_IMG be? 2835bd8deadSopenharmony_ci 2845bd8deadSopenharmony_ci RESOLVED: If TRP_IMG default state was True, then every geometry 2855bd8deadSopenharmony_ci being rendered, irrespective of it being safety-critical or not, 2865bd8deadSopenharmony_ci will be treated as safety-related and safety integrity checks 2875bd8deadSopenharmony_ci would be run on them. This will have a negative effect on the 2885bd8deadSopenharmony_ci overall performance and would defeat the purpose of TRP, as TRP 2895bd8deadSopenharmony_ci is aimed at providing efficient and high performance 2905bd8deadSopenharmony_ci safety-critical rendering. Hence the default state of TRP_IMG is 2915bd8deadSopenharmony_ci false. 2925bd8deadSopenharmony_ci 2935bd8deadSopenharmony_ci From an application perspective, TRP must be enabled before 2945bd8deadSopenharmony_ci submitting the safety-critical geometric primitives to the GL in 2955bd8deadSopenharmony_ci order to run the TRP safety integrity checks for them to detect 2965bd8deadSopenharmony_ci and report faults in their rendering. TRP should be disabled 2975bd8deadSopenharmony_ci before submitting non safety-critical sequence of geometric 2985bd8deadSopenharmony_ci primitives to the GL. 2995bd8deadSopenharmony_ci 3005bd8deadSopenharmony_ci 2) How should the application react to a TRP_ERROR_CONTEXT_RESET_IMG 3015bd8deadSopenharmony_ci event? 3025bd8deadSopenharmony_ci 3035bd8deadSopenharmony_ci RESOLVED: Application should treat TRP_ERROR_CONTEXT_RESET_IMG 3045bd8deadSopenharmony_ci similar to a context reset event and should not use the graphics 3055bd8deadSopenharmony_ci context for any further purpose. Recovery requires creating a new 3065bd8deadSopenharmony_ci context and recreating all relevant states from the lost context. 3075bd8deadSopenharmony_ci 3085bd8deadSopenharmony_ci 3) How does this extension ensure freedom from interference 3095bd8deadSopenharmony_ci during the rendering of safety-critical sequence of geometric 3105bd8deadSopenharmony_ci primitives from faults that may arise from the rendering of 3115bd8deadSopenharmony_ci non-safety critical geometric primitives ? 3125bd8deadSopenharmony_ci 3135bd8deadSopenharmony_ci RESOLVED: In order to ensure the integrity of rendering of 3145bd8deadSopenharmony_ci safety-critical sequence of geometric primitives, it is required 3155bd8deadSopenharmony_ci to ensure that there is freedom from interference during the 3165bd8deadSopenharmony_ci rendering of safety-critical geometric primitives from faults 3175bd8deadSopenharmony_ci that may have occurred during the rendering of 3185bd8deadSopenharmony_ci non safety-critical geometric primitives. Otherwise, such a fault 3195bd8deadSopenharmony_ci might cause non safety-critical geometric primitives to occlude 3205bd8deadSopenharmony_ci the safety-critical geometries and prevent it from being 3215bd8deadSopenharmony_ci displayed correctly. 3225bd8deadSopenharmony_ci 3235bd8deadSopenharmony_ci This extension can efficiently detect such faults from 3245bd8deadSopenharmony_ci interfering with the expected rendering of safety-critical 3255bd8deadSopenharmony_ci sequence of geometric primitives, provided the application has 3265bd8deadSopenharmony_ci tagged at least one of the submitted geometric primitive as 3275bd8deadSopenharmony_ci safety-related. However, if the application explicitly calls 3285bd8deadSopenharmony_ci Flush, Finish or Readnpixels to submit commands containing only 3295bd8deadSopenharmony_ci non safety-critical sequence of geometric primitives to the GPU 3305bd8deadSopenharmony_ci and then proceeds to add more geometric primitives, including 3315bd8deadSopenharmony_ci sequence of safety-critical geometric primitives, then, the TRP 3325bd8deadSopenharmony_ci extension will not be able to ensure freedom from interference 3335bd8deadSopenharmony_ci during the rendering of the safety-critical sequence of geometric 3345bd8deadSopenharmony_ci primitives from faults that may have occurred from the rendering 3355bd8deadSopenharmony_ci of previously submitted non-safety critical geometric primitives. 3365bd8deadSopenharmony_ci In such use cases, the application should add additional safety 3375bd8deadSopenharmony_ci mechanisms to verify that the safety-critical geometry rendering 3385bd8deadSopenharmony_ci was not affected by faults from non safety-critical sequence of 3395bd8deadSopenharmony_ci geometric primitives. 3405bd8deadSopenharmony_ci 3415bd8deadSopenharmony_ci It is highly recommended to avoid such use cases where the 3425bd8deadSopenharmony_ci application explicitly submits all previously called commands 3435bd8deadSopenharmony_ci (eg by calling Flush, Finish or Readnpixels), containing only 3445bd8deadSopenharmony_ci non safety-critical sequence of geometric primitives to the GPU 3455bd8deadSopenharmony_ci and then adds more geometric primitives including sequence of 3465bd8deadSopenharmony_ci safety-critical geometries for rendering. The same also applies 3475bd8deadSopenharmony_ci for the case where the application explicitly submits 3485bd8deadSopenharmony_ci safety-critical sequence of geometric primitives and then 3495bd8deadSopenharmony_ci adds further sequence of only non safety-critical 3505bd8deadSopenharmony_ci geometric primitives. This TRP extension is capable of 3515bd8deadSopenharmony_ci efficiently detecting rendering faults from non safety-critical 3525bd8deadSopenharmony_ci geometric primitives affecting safety-critical geometric 3535bd8deadSopenharmony_ci primitives rendering if it knows that there is at least one 3545bd8deadSopenharmony_ci safety-critical geometric primitive in the submitted sequence of 3555bd8deadSopenharmony_ci geometric primitives. 3565bd8deadSopenharmony_ci 3575bd8deadSopenharmony_ciRevision History 3585bd8deadSopenharmony_ci 3595bd8deadSopenharmony_ci Revision 1.0, 06/06/2022 3605bd8deadSopenharmony_ci - Initial revision. 361