blob: 9f614a735153dde391b16ac84f947077ae9e311f [file] [log] [blame]
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.