Name IMG_context_priority Name Strings EGL_IMG_context_priority Contributors Ben Bowman, Imagination Techonologies Graham Connor, Imagination Techonologies Contacts Ben Bowman, Imagination Technologies (benji 'dot' bowman 'at' imgtec 'dot' com) Status Complete Version Version 1.1, 8 September 2009 Number EGL Extension #10 Dependencies Requires EGL 1.0. This extension is written against the wording of the EGL 1.4 Specification - May 2, 2008 (but may be implemented against earlier versions). Overview This extension allows an EGLContext to be created with a priority hint. It is possible that an implementation will not honour the hint, especially if there are constraints on the number of high priority contexts available in the system, or system policy limits access to high priority contexts to appropriate system privilege level. A query is provided to find the real priority level assigned to the context after creation. New Types None New Procedures and Functions None New Tokens New attributes accepted by the argument of eglCreateContext EGL_CONTEXT_PRIORITY_LEVEL_IMG 0x3100 New attribute values accepted in the argument of eglCreateContext: EGL_CONTEXT_PRIORITY_HIGH_IMG 0x3101 EGL_CONTEXT_PRIORITY_MEDIUM_IMG 0x3102 EGL_CONTEXT_PRIORITY_LOW_IMG 0x3103 Additions to Chapter 3 of the EGL 1.4 Specification (EGL Functions and Errors) Modify the list of attributes supported by eglCreateContext in section 3.7.1 (Creating Rendering Contexts) on p. 42: " specifies a list of attributes for the context. The list has the same structure as described for eglChooseConfig. The only attributes that can be specified in are EGL_CONTEXT_CLIENT_VERSION and EGL_CONTEXT_PRIORITY_LEVEL_IMG. The EGL_CONTEXT_CLIENT_VERSION attribute may only be specified when creating a OpenGL ES context (e.g. when the current rendering API is EGL_OPENGL_ES_API). may be NULL or empty (first attribute is EGL_NONE), in which case attributes assume their default values as described below. EGL_CONTEXT_CLIENT_VERSION determines which version of an OpenGL ES context to create. An attribute value of 1 specifies creation of an OpenGL ES 1.x context. An attribute value of 2 specifies creation of an OpenGL ES 2.x context. The default value for EGL_CONTEXT_CLIENT_VERSION is 1. EGL_CONTEXT_PRIORITY_LEVEL_IMG determines the priority level of the context to be created. This attribute is a hint, as an implementation may not support multiple contexts at some priority levels and system policy may limit access to high priority contexts to appropriate system privilege level. The default value for EGL_CONTEXT_PRIORITY_LEVEL_IMG is EGL_CONTEXT_PRIORITY_MEDIUM_IMG." Modify the list of attributes supported by eglQueryContext in section 3.7.4 (Context Queries) on p. 46: "eglQueryContext returns in the value of attribute for . must be set to EGL_CONFIG_ID, EGL_CONTEXT_CLIENT_TYPE, EGL_CONTEXT_CLIENT_VERSION, EGL_RENDER_BUFFER, or EGL_CONTEXT_PRIORITY_LEVEL_IMG. ... Querying EGL_CONTEXT_PRIORITY_LEVEL_IMG returns the priority this context was actually created with. Note: this may not be the same as specified at context creation time, due to implementation limits on the number of contexts that can be created at a specific priority level in the system." ISSUES: 1) Should the context priority be treated as a hint or a requirement RESOLVED: The context priority should be a hint. System policy may limit high priority contexts to appropriate system privilege level. Implementations may have a limit on the number of context supported at each priority, and may require all contexts within a process to have the same priority level. 2) Can an application find out what priority a context was assigned? RESOLVED: Provide a query to find the assigned priority for a context. An application may find that it has a lower (or higher) priority than requested (although it probably cannot do much with the information). 3) How many priority levels should be defined? RESOLVED: Three seems appropriate, as the highest provides the largest GPU timeslice and reduced latency. It might be useful to specify a low priority context which has a small timeslice and high latency. It is possible that a request for LOW will actually return MEDIUM on an implementation that doesn't differentiate between the lower two levels. 4) What should the default priority level be if not specified? OPTION 1: HIGH - This allows applications that are unaware of this extension to get the highest priority possible. OPTIONS 2: MEDIUM - This allows truly high priority applications to differentiate themselves from applications which are unaware of this extension. RESOLVED: OPTION 2: MEDIUM - Allow truly high priority applications to differentiate themselves. Revision History Version 1.1, 08/09/2009 (Jon Leech) Assign extension number and publish in the Registry. Formatting cleanup. Version 1.0, 30/04/2009 - Final clean up. Marked issues as resolved, take out draft status Version 0.3, 22/04/2009 - enums assigned from Khronos registry. Version 0.2, 02/04/2009 - feedback from gdc. Version 0.1, 31/03/2009 - first draft.