| Name |
| |
| ANGLE_power_preference |
| |
| Name Strings |
| |
| EGL_ANGLE_power_preference |
| |
| Contributors |
| |
| Kenneth Russell |
| |
| Contacts |
| |
| Kenneth Russell, Google Inc. (kbr 'at' google.com) |
| |
| Status |
| |
| Draft |
| |
| Version |
| |
| Version 1, April 16, 2019 |
| |
| Number |
| |
| EGL Extension #?? |
| |
| Dependencies |
| |
| This extension is written against the wording of the EGL 1.4 |
| Specification. |
| |
| Overview |
| |
| This extension allows selection of the high- or low-power GPU on |
| dual-GPU systems, specifically on macOS. |
| |
| New Types |
| |
| None |
| |
| New Procedures and Functions |
| |
| void eglReleaseHighPowerGPUANGLE( |
| EGLDisplay dpy, |
| EGLContext context); |
| void eglReacquireHighPowerGPUANGLE( |
| EGLDisplay dpy, |
| EGLContext context); |
| void eglHandleGPUSwitchANGLE(EGLDisplay dpy); |
| |
| New Tokens |
| |
| Accepted as an attribute name in the <*attrib_list> argument to |
| eglCreateContext: |
| |
| EGL_POWER_PREFERENCE_ANGLE 0x3482 |
| |
| Accepted as an attribute value in the <*attrib_list> argument to |
| eglCreateContext: |
| |
| EGL_LOW_POWER_ANGLE 0x0001 |
| EGL_HIGH_POWER_ANGLE 0x0002 |
| |
| Additions to the EGL 1.4 Specification |
| |
| Add the following to section 3.7.1 "Creating Rendering Contexts": |
| |
| EGL_POWER_PREFERENCE_ANGLE indicates whether the context should be |
| created on the integrated (low-power) or discrete (high-power) GPU |
| on dual-GPU systems. EGL_POWER_PREFERENCE_ANGLE is only a legal |
| context creation attribute when the EGL_ANGLE_power_preference |
| extension is advertised. The valid values for this attribute are |
| EGL_LOW_POWER_ANGLE and EGL_HIGH_POWER_ANGLE. If this extension is |
| advertised and this context creation attribute is not specified, |
| the default value is EGL_LOW_POWER_ANGLE. |
| |
| The containing application must set the |
| NSSupportsAutomaticGraphicsSwitching attribute to true in its |
| Info.plist in order for this extension to operate as advertised. |
| |
| eglReleaseHighPowerGPUANGLE, when passed an EGLContext allocated |
| with the EGL_POWER_PREFERENCE_ANGLE context creation attribute set |
| to EGL_HIGH_POWER_ANGLE, will cause that context to release its |
| hold on the high-power GPU. |
| |
| eglReacquireHighPowerGPUANGLE, when passed an EGLContext allocated |
| with the EGL_POWER_PREFERENCE_ANGLE context creation attribute set |
| to EGL_HIGH_POWER_ANGLE and which was previously released via |
| eglReleaseHighPowerGPUANGLE, will cause that context to reacquire |
| its hold on the high-power GPU. |
| |
| eglReleaseHighPowerGPUANGLE and eglReacquireHighPowerGPUANGLE have |
| no effect on contexts that were allocated with the |
| EGL_LOW_POWER_ANGLE preference, or contexts not allocated with |
| either preference. |
| |
| For either eglReleaseHighPowerGPUANGLE or |
| eglReacquireHighPowerGPUANGLE: |
| |
| If |dpy| is not a valid display, an EGL_BAD_DISPLAY error is |
| generated. |
| |
| if |dpy| is an uninitialized display, an EGL_NOT_INITIALIZED error |
| is generated. |
| |
| If |context| is not a valid context, an EGL_BAD_CONTEXT error is |
| generated. |
| |
| eglHandleGPUSwitchANGLE should be called in response to a display |
| reconfiguration callback (registered via |
| CGDisplayRegisterReconfigurationCallback) in order to complete |
| transitions between the low-power and high-power GPUs. For calls |
| to this function: |
| |
| If |dpy| is not a valid display, an EGL_BAD_DISPLAY error is |
| generated. |
| |
| if |dpy| is an uninitialized display, an EGL_NOT_INITIALIZED error |
| is generated. |
| |
| Issues |
| |
| None yet. |
| |
| Revision History |
| |
| Rev. Date Author Changes |
| ---- ------------- --------- ---------------------------------------- |
| 1 Apr 16, 2019 kbr Initial version |
| 2 June 5, 2020 kbr Add eglReleaseHighPowerGPUANGLE, |
| eglReacquireHighPowerGPUANGLE, and |
| eglHandleGPUSwitchANGLE |