cogl/renderer: Always try to use GLX_NV_robustness_video_memory_purge

It was always set to TRUE and mutter is the only user.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3887>
This commit is contained in:
Bilal Elmoussaoui 2024-07-15 22:09:31 +02:00 committed by Marge Bot
parent 2c5f874eaa
commit a7b87f250f
6 changed files with 1 additions and 59 deletions

View File

@ -253,10 +253,6 @@ typedef enum _CoglGraphicsResetStatus
* extension in which case this will only ever return * extension in which case this will only ever return
* #COGL_GRAPHICS_RESET_STATUS_NO_ERROR. * #COGL_GRAPHICS_RESET_STATUS_NO_ERROR.
* *
* Applications must explicitly use a backend specific method to
* request that errors get reported such as X11's
* cogl_xlib_renderer_request_reset_on_video_memory_purge().
*
* Return value: a #CoglGraphicsResetStatus * Return value: a #CoglGraphicsResetStatus
*/ */
COGL_EXPORT CoglGraphicsResetStatus COGL_EXPORT CoglGraphicsResetStatus

View File

@ -63,7 +63,6 @@ struct _CoglRenderer
#ifdef HAVE_X11 #ifdef HAVE_X11
Display *foreign_xdpy; Display *foreign_xdpy;
gboolean xlib_enable_event_retrieval; gboolean xlib_enable_event_retrieval;
gboolean xlib_want_reset_on_video_memory_purge;
#endif #endif
CoglDriver driver; CoglDriver driver;

View File

@ -224,16 +224,6 @@ cogl_xlib_renderer_set_foreign_display (CoglRenderer *renderer,
it will also do its own event retrieval */ it will also do its own event retrieval */
renderer->xlib_enable_event_retrieval = FALSE; renderer->xlib_enable_event_retrieval = FALSE;
} }
void
cogl_xlib_renderer_request_reset_on_video_memory_purge (CoglRenderer *renderer,
gboolean enable)
{
g_return_if_fail (COGL_IS_RENDERER (renderer));
g_return_if_fail (!renderer->connected);
renderer->xlib_want_reset_on_video_memory_purge = enable;
}
#endif /* HAVE_X11 */ #endif /* HAVE_X11 */
gboolean gboolean

View File

@ -112,45 +112,4 @@ COGL_EXPORT void
cogl_xlib_renderer_set_foreign_display (CoglRenderer *renderer, cogl_xlib_renderer_set_foreign_display (CoglRenderer *renderer,
Display *display); Display *display);
/**
* cogl_xlib_renderer_request_reset_on_video_memory_purge: (skip)
* @renderer: a #CoglRenderer
* @enable: The new value
*
* Sets whether Cogl should make use of the
* NV_robustness_video_memory_purge extension, if exposed by the
* driver, by initializing the GLX context appropriately.
*
* The extension is only useful when running on certain versions of
* the NVIDIA driver. Quoting from the spec:
*
* "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."
*
* "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."
*
* "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."
*
* cogl_get_graphics_reset_status() needs to be called at least once
* every frame to find out if video memory was purged.
*
* Note that this doesn't cause Cogl to enable robust buffer access
* but other context reset errors may still happen and be reported via
* cogl_get_graphics_reset_status() if external factors cause the
* driver to trigger them.
*
* This defaults to %FALSE and is effective only if called before
* cogl_display_setup() .
*/
COGL_EXPORT void
cogl_xlib_renderer_request_reset_on_video_memory_purge (CoglRenderer *renderer,
gboolean enable);
G_END_DECLS G_END_DECLS

View File

@ -628,8 +628,7 @@ create_gl3_context (CoglDisplay *display,
/* We can't check the presence of this extension with the usual /* We can't check the presence of this extension with the usual
COGL_WINSYS_FEATURE machinery because that only gets initialized COGL_WINSYS_FEATURE machinery because that only gets initialized
later when the CoglContext is created. */ later when the CoglContext is created. */
if (display->renderer->xlib_want_reset_on_video_memory_purge && if (strstr (glx_renderer->glXQueryExtensionsString (xlib_renderer->xdpy,
strstr (glx_renderer->glXQueryExtensionsString (xlib_renderer->xdpy,
DefaultScreen (xlib_renderer->xdpy)), DefaultScreen (xlib_renderer->xdpy)),
"GLX_NV_robustness_video_memory_purge")) "GLX_NV_robustness_video_memory_purge"))
{ {

View File

@ -88,7 +88,6 @@ meta_renderer_x11_create_cogl_renderer (MetaRenderer *renderer)
cogl_renderer_set_custom_winsys (cogl_renderer, get_x11_cogl_winsys_vtable, cogl_renderer_set_custom_winsys (cogl_renderer, get_x11_cogl_winsys_vtable,
NULL); NULL);
cogl_xlib_renderer_set_foreign_display (cogl_renderer, xdisplay); cogl_xlib_renderer_set_foreign_display (cogl_renderer, xdisplay);
cogl_xlib_renderer_request_reset_on_video_memory_purge (cogl_renderer, TRUE);
return cogl_renderer; return cogl_renderer;
} }