render/egl: enable EGL_LOSE_CONTEXT_ON_RESET

This allows the GLES2 renderer to figure out when a GPU reset
happens.
This commit is contained in:
Simon Ser 2022-01-12 19:14:32 +01:00 committed by Simon Zeni
parent 261d6998fb
commit 165352e32f
2 changed files with 10 additions and 1 deletions

View file

@ -15,6 +15,7 @@ struct wlr_egl {
bool EXT_image_dma_buf_import; bool EXT_image_dma_buf_import;
bool EXT_image_dma_buf_import_modifiers; bool EXT_image_dma_buf_import_modifiers;
bool IMG_context_priority; bool IMG_context_priority;
bool EXT_create_context_robustness;
// Device extensions // Device extensions
bool EXT_device_drm; bool EXT_device_drm;

View file

@ -288,6 +288,9 @@ static bool egl_init_display(struct wlr_egl *egl, EGLDisplay display) {
"eglQueryDmaBufModifiersEXT"); "eglQueryDmaBufModifiersEXT");
} }
egl->exts.EXT_create_context_robustness =
check_egl_ext(display_exts_str, "EGL_EXT_create_context_robustness");
const char *device_exts_str = NULL, *driver_name = NULL; const char *device_exts_str = NULL, *driver_name = NULL;
if (egl->exts.EXT_device_query) { if (egl->exts.EXT_device_query) {
EGLAttrib device_attrib; EGLAttrib device_attrib;
@ -385,7 +388,7 @@ static bool egl_init(struct wlr_egl *egl, EGLenum platform,
} }
size_t atti = 0; size_t atti = 0;
EGLint attribs[5]; EGLint attribs[7];
attribs[atti++] = EGL_CONTEXT_CLIENT_VERSION; attribs[atti++] = EGL_CONTEXT_CLIENT_VERSION;
attribs[atti++] = 2; attribs[atti++] = 2;
@ -400,6 +403,11 @@ static bool egl_init(struct wlr_egl *egl, EGLenum platform,
attribs[atti++] = EGL_CONTEXT_PRIORITY_HIGH_IMG; attribs[atti++] = EGL_CONTEXT_PRIORITY_HIGH_IMG;
} }
if (egl->exts.EXT_create_context_robustness) {
attribs[atti++] = EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT;
attribs[atti++] = EGL_LOSE_CONTEXT_ON_RESET_EXT;
}
attribs[atti++] = EGL_NONE; attribs[atti++] = EGL_NONE;
assert(atti <= sizeof(attribs)/sizeof(attribs[0])); assert(atti <= sizeof(attribs)/sizeof(attribs[0]));