| Name |
| |
| NV_robustness_video_memory_purge |
| |
| Name Strings |
| |
| GL_NV_robustness_video_memory_purge |
| GLX_NV_robustness_video_memory_purge |
| EGL_NV_robustness_video_memory_purge |
| |
| Contact |
| |
| Arthur Huillet, NVIDIA Corporation (ahuillet 'at' nvidia.com) |
| |
| Contributors |
| |
| Arthur Huillet, NVIDIA Corporation |
| Jeff Juliano, NVIDIA Corporation |
| |
| Status |
| |
| Shipping. |
| |
| Version |
| |
| Last Modified Date: May 26, 2016 |
| Revision: 5 |
| |
| Number |
| |
| Unassigned |
| |
| Dependencies |
| |
| This extension is written against the ARB_robustness and |
| GLX_ARB_create_context extensions. |
| |
| Overview |
| |
| Allow applications to be notified when video memory has been purged. |
| |
| The NVIDIA OpenGL driver architecture on Linux has a limitation: |
| resources located in video memory are not persistent across certain |
| events. VT switches, suspend/resume events, and mode switching |
| events may erase the contents of video memory. Any resource that |
| is located exclusively in video memory, such as framebuffer objects |
| (FBOs), will be lost. As the OpenGL specification makes no mention |
| of events where the video memory is allowed to be cleared, the |
| driver attempts to hide this fact from the application, but cannot |
| do it for all resources. |
| |
| This extension provides a way for applications to discover when video |
| memory content has been lost, so that the application can re-populate |
| the video memory content as necessary. |
| |
| This extension will have a limited lifespan, as planned architectural |
| evolutions in the NVIDIA Linux driver stack will allow |
| video memory to be persistent. Any driver that exposes this |
| extension is a driver that considers video memory to be |
| volatile. Once the driver stack has been improved, the extension |
| will no longer be exposed. |
| |
| New Procedures and Functions |
| |
| NONE |
| |
| New Tokens |
| |
| Returned by GetGraphicsResetStatusARB, in addition to other tokens |
| defined in ARB_robustness: |
| |
| PURGED_CONTEXT_RESET_NV 0x92BB |
| |
| Accepted as an attribute name in the <*attrib_list> argument of |
| glXCreateContextAttribsARB: |
| |
| GLX_GENERATE_RESET_ON_VIDEO_MEMORY_PURGE_NV 0x20F7 |
| |
| Accepted as an attribute name in the <*attrib_list> argument of |
| eglCreateContext: |
| |
| EGL_GENERATE_RESET_ON_VIDEO_MEMORY_PURGE_NV 0x334C |
| |
| Additions to Chapter 2 of the OpenGL 3.2 (Compatibility Profile) |
| Specification (OpenGL Operation) |
| |
| Modify subsection 2.6 "Graphics Reset Recovery". After: |
| UNKNOWN_CONTEXT_RESET_ARB indicates a detected graphics reset |
| whose cause is unknown. |
| |
| add: |
| PURGED_CONTEXT_RESET_NV indicates that video memory was purged |
| in a mode switch event. In that case, the application can no |
| longer count on its resources' content being preserved, and must |
| delete and recreate all buffer objects including FBOs and all |
| textures bound to an FBO, transfer all relevant data again, |
| and re-render to FBOs. Using buffer objects, including FBOs, |
| that haven't been deleted and re-created is undefined behavior. |
| Other objects are unaffected. |
| |
| GetGraphicsResetStatusARB() needs to be called at least once |
| every frame, after a Flush(), Finish(), or buffer swapping call. |
| |
| Additions to the GLX 1.4 Specification |
| |
| This extension modifies language specified in the |
| GLX_ARB_create_context and GLX_ARB_create_context_profile |
| extensions. |
| |
| Add a new paragraph to the description of glXCreateContextAttribsARB: |
| |
| The attribute name GLX_GENERATE_RESET_ON_VIDEO_MEMORY_PURGE_NV, |
| which defaults to GL_FALSE, can be specified as GL_TRUE. In this |
| case, a context reset notification will be generated when video |
| memory content has been lost. This will only take effect if the |
| attribute GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB is set to |
| GLX_LOSE_CONTEXT_ON_RESET_ARB. |
| |
| Additions to the EGL 1.5 Specification |
| |
| Modify the description of eglCreateContext. Add a new section: |
| |
| 3.7.1.7 OpenGL reset notification for video memory purge events |
| |
| The attribute name EGL_GENERATE_RESET_ON_VIDEO_MEMORY_PURGE_NV, |
| which defaults to GL_FALSE, can be specified as GL_TRUE. In this |
| case, a context reset notification will be generated when video |
| memory content has been lost. This will only take effect if the |
| attribute EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY is set |
| to EGL_LOSE_CONTEXT_ON_RESET. |
| |
| Errors |
| |
| NONE |
| |
| Issues |
| |
| (1) Does this extension allow an application to be sure that the |
| rendered image is always perfect? |
| |
| Events that clear video memory happen asynchronously to OpenGL |
| clients, so this extension does not guarantee perfect rendering. |
| |
| (2) Which NVIDIA drivers are affected? |
| |
| Not all NVIDIA drivers expose this extension, but all desktop Linux |
| drivers at the time of its publishing are affected by the issues it |
| addresses. |
| |
| Example |
| |
| create_gl_context(); |
| create_resources(); |
| while (1) { |
| update_world(); |
| if (GetGraphicsResetStatusARB() == PURGED_CONTEXT_RESET_NV) { |
| delete_resources(); |
| create_resources(); |
| } |
| render_frame(); |
| } |
| |
| Revision History |
| |
| #1 April 1, 2016: Arthur Huillet |
| - First draft. |
| |
| #2 April 2, 2016: Jeff Juliano |
| - Reflow with line wrap, eliminate tabs. |
| |
| #3 April 5, 2016: Arthur Huillet |
| - Rewrite as extension of ARB_robustness. |
| |
| #4 April 20, 2016: Arthur Huillet |
| - Improve language. |
| |
| #5 May 26, 2016: Arthur Huillet |
| - Add a context creation bit. |