From 515679e4fed1c7c762a8c269fca09cbb195a4323 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Sun, 10 Nov 2019 14:31:33 +0100 Subject: Refactor EGL/GL API loading Remove glapi.sh code generation, replace it with hand-written loading code that checks extension strings before calling eglGetProcAddress. The GLES2 renderer still uses global state because of: - {PUSH,POP}_GLES2_DEBUG macros - wlr_gles2_texture_from_* taking a wlr_egl instead of the renderer --- include/render/gles2.h | 11 ++++++++++- include/wlr/render/egl.h | 23 +++++++++++++++++++---- 2 files changed, 29 insertions(+), 5 deletions(-) (limited to 'include') diff --git a/include/render/gles2.h b/include/render/gles2.h index 7a629d69..817ec62d 100644 --- a/include/render/gles2.h +++ b/include/render/gles2.h @@ -14,6 +14,16 @@ #include #include +struct wlr_gles2_procs { + PFNGLEGLIMAGETARGETTEXTURE2DOESPROC glEGLImageTargetTexture2DOES; + PFNGLDEBUGMESSAGECALLBACKKHRPROC glDebugMessageCallbackKHR; + PFNGLDEBUGMESSAGECONTROLKHRPROC glDebugMessageControlKHR; + PFNGLPOPDEBUGGROUPKHRPROC glPopDebugGroupKHR; + PFNGLPUSHDEBUGGROUPKHRPROC glPushDebugGroupKHR; +}; + +extern struct wlr_gles2_procs gles2_procs; + struct wlr_gles2_pixel_format { enum wl_shm_format wl_format; GLint gl_format, gl_type; @@ -33,7 +43,6 @@ struct wlr_gles2_renderer { struct wlr_renderer wlr_renderer; struct wlr_egl *egl; - const char *exts_str; struct { bool read_format_bgra_ext; diff --git a/include/wlr/render/egl.h b/include/wlr/render/egl.h index efded0b6..2853f8ed 100644 --- a/include/wlr/render/egl.h +++ b/include/wlr/render/egl.h @@ -22,6 +22,8 @@ #include #include +// TODO: remove eglmesaext.h +#include #include #include #include @@ -34,8 +36,6 @@ struct wlr_egl { EGLConfig config; EGLContext context; - const char *exts_str; - struct { bool bind_wayland_display_wl; bool buffer_age_ext; @@ -43,10 +43,25 @@ struct wlr_egl { bool image_dma_buf_export_mesa; bool image_dmabuf_import_ext; bool image_dmabuf_import_modifiers_ext; - bool swap_buffers_with_damage_ext; - bool swap_buffers_with_damage_khr; + bool swap_buffers_with_damage; } exts; + struct { + PFNEGLGETPLATFORMDISPLAYEXTPROC eglGetPlatformDisplayEXT; + PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC eglCreatePlatformWindowSurfaceEXT; + PFNEGLCREATEIMAGEKHRPROC eglCreateImageKHR; + PFNEGLDESTROYIMAGEKHRPROC eglDestroyImageKHR; + PFNEGLQUERYWAYLANDBUFFERWL eglQueryWaylandBufferWL; + PFNEGLBINDWAYLANDDISPLAYWL eglBindWaylandDisplayWL; + PFNEGLUNBINDWAYLANDDISPLAYWL eglUnbindWaylandDisplayWL; + PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC eglSwapBuffersWithDamage; // KHR or EXT + PFNEGLQUERYDMABUFFORMATSEXTPROC eglQueryDmaBufFormatsEXT; + PFNEGLQUERYDMABUFMODIFIERSEXTPROC eglQueryDmaBufModifiersEXT; + PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC eglExportDMABUFImageQueryMESA; + PFNEGLEXPORTDMABUFIMAGEMESAPROC eglExportDMABUFImageMESA; + PFNEGLDEBUGMESSAGECONTROLKHRPROC eglDebugMessageControlKHR; + } procs; + struct wl_display *wl_display; struct wlr_drm_format_set dmabuf_formats; -- cgit v1.2.3