1
0
Fork 0

renderer/native: Remove cached program ID when EGLContext destroyed

In the rare event that hotplugs destroy and then create a new EGLContext
with the exactly the same ID, this ensures we will forget the old program
which presumably wouldn't work in the new context. It will be recreated.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3304>
This commit is contained in:
Daniel van Vugt 2024-01-09 18:03:51 +08:00 committed by Marge Bot
parent ccca3709c2
commit 7e27d297dd
3 changed files with 16 additions and 0 deletions

View file

@ -443,3 +443,12 @@ meta_renderer_native_gles3_blit_shared_bo (MetaEgl *egl,
return TRUE;
}
void
meta_renderer_native_gles3_forget_context (MetaGles3 *gles3,
EGLContext egl_context)
{
GQuark context_data_quark = get_quark_for_egl_context (egl_context);
g_object_set_qdata (G_OBJECT (gles3), context_data_quark, NULL);
}

View file

@ -33,3 +33,6 @@ gboolean meta_renderer_native_gles3_blit_shared_bo (MetaEgl *egl,
EGLSurface egl_surface,
struct gbm_bo *shared_bo,
GError **error);
void meta_renderer_native_gles3_forget_context (MetaGles3 *gles3,
EGLContext egl_context);

View file

@ -63,6 +63,7 @@
#include "backends/native/meta-output-kms.h"
#include "backends/native/meta-render-device-gbm.h"
#include "backends/native/meta-render-device-surfaceless.h"
#include "backends/native/meta-renderer-native-gles3.h"
#include "backends/native/meta-renderer-native-private.h"
#include "backends/native/meta-renderer-view-native.h"
#include "cogl/cogl.h"
@ -137,6 +138,9 @@ meta_renderer_native_gpu_data_free (MetaRendererNativeGpuData *renderer_gpu_data
MetaRendererNative *renderer_native = renderer_gpu_data->renderer_native;
MetaEgl *egl = meta_renderer_native_get_egl (renderer_native);
meta_renderer_native_gles3_forget_context (renderer_native->gles3,
renderer_gpu_data->secondary.egl_context);
meta_egl_destroy_context (egl,
egl_display,
renderer_gpu_data->secondary.egl_context,