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:
parent
2c5f874eaa
commit
a7b87f250f
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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"))
|
||||||
{
|
{
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user