From 48e416ee2f0277114848af4f36216f7931336b54 Mon Sep 17 00:00:00 2001 From: Sylvain Munaut Date: Tue, 8 Aug 2023 02:03:27 +0200 Subject: [PATCH] egl: Export the MESA GL Interop functions through eglGetProcAddress Signed-off-by: Sylvain Munaut Acked-by: Antonio Gomes Reviewed-by: Adam Jackson Reviewed-by: Eric Engestrom Part-of: --- src/egl/egl-entrypoint-check.py | 12 +++++++++--- src/egl/generate/eglFunctionList.py | 4 ++++ src/egl/generate/egl_other.xml | 28 ++++++++++++++++++++++++++++ src/egl/generate/gen_egl_dispatch.py | 1 + src/egl/main/eglapi.c | 4 +++- src/egl/main/eglentrypoint.h | 4 ++++ 6 files changed, 49 insertions(+), 4 deletions(-) diff --git a/src/egl/egl-entrypoint-check.py b/src/egl/egl-entrypoint-check.py index 967ea0646ba..c9aaa7f3515 100644 --- a/src/egl/egl-entrypoint-check.py +++ b/src/egl/egl-entrypoint-check.py @@ -4,7 +4,8 @@ import argparse from generate.eglFunctionList import EGL_FUNCTIONS as GLVND_ENTRYPOINTS -PREFIX = 'EGL_ENTRYPOINT(' +PREFIX1 = 'EGL_ENTRYPOINT(' +PREFIX2 = 'EGL_ENTRYPOINT2(' SUFFIX = ')' @@ -69,9 +70,14 @@ def main(): entrypoints = [] for line in lines: line = line.strip() - if line.startswith(PREFIX): + if line.startswith(PREFIX1): assert line.endswith(SUFFIX) - entrypoints.append(line[len(PREFIX):-len(SUFFIX)]) + entrypoints.append(line[len(PREFIX1):-len(SUFFIX)]) + if line.startswith(PREFIX2): + assert line.endswith(SUFFIX) + entrypoint = line[len(PREFIX2):-len(SUFFIX)] + entrypoint = entrypoint.split(',')[0].strip() + entrypoints.append(entrypoint) check_entrypoint_sorted(entrypoints) diff --git a/src/egl/generate/eglFunctionList.py b/src/egl/generate/eglFunctionList.py index c1777eb7592..5076ced6f11 100644 --- a/src/egl/generate/eglFunctionList.py +++ b/src/egl/generate/eglFunctionList.py @@ -242,5 +242,9 @@ EGL_FUNCTIONS = ( # EGL_KHR_partial_update _eglFunc("eglSetDamageRegionKHR", "display"), + # EGL_MESA_gl_interop + _eglFunc("eglGLInteropQueryDeviceInfoMESA", "display"), + _eglFunc("eglGLInteropExportObjectMESA", "display"), + _eglFunc("eglGLInteropFlushObjectsMESA", "display"), ) diff --git a/src/egl/generate/egl_other.xml b/src/egl/generate/egl_other.xml index 74c70ccdbef..5a7c4adbf4f 100644 --- a/src/egl/generate/egl_other.xml +++ b/src/egl/generate/egl_other.xml @@ -31,6 +31,11 @@ This file contains any EGL extension functions that are missing from the normal egl.xml list. + + struct mesa_glinterop_device_info; + struct mesa_glinterop_export_in; + struct mesa_glinterop_export_out; + @@ -77,6 +82,29 @@ EGLint * numerator EGLint * denominator + + + + EGLint eglGLInteropQueryDeviceInfoMESA + EGLDisplay dpy + EGLContext ctx + struct mesa_glinterop_device_info *out + + + EGLint eglGLInteropExportObjectMESA + EGLDisplay dpy + EGLContext ctx + struct mesa_glinterop_export_in *in + struct mesa_glinterop_export_out *out + + + EGLint eglGLInteropFlushObjectsMESA + EGLDisplay dpy + EGLContext ctx + unsigned count + struct mesa_glinterop_export_in *objects + GLsync *sync + diff --git a/src/egl/generate/gen_egl_dispatch.py b/src/egl/generate/gen_egl_dispatch.py index be546bbda77..dccc7f3cbaa 100644 --- a/src/egl/generate/gen_egl_dispatch.py +++ b/src/egl/generate/gen_egl_dispatch.py @@ -102,6 +102,7 @@ def generateHeader(functions): #include #include #include + #include #include "glvnd/libeglabi.h" """.lstrip("\n")) diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c index 6053eb7b8a0..d24eb04f41c 100644 --- a/src/egl/main/eglapi.c +++ b/src/egl/main/eglapi.c @@ -2797,8 +2797,10 @@ PUBLIC __eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress(const char *procname) { static const struct _egl_entrypoint egl_functions[] = { -#define EGL_ENTRYPOINT(f) {.name = #f, .function = (_EGLProc)f}, +#define EGL_ENTRYPOINT(f) {.name = #f, .function = (_EGLProc)f}, +#define EGL_ENTRYPOINT2(n, f) {.name = #n, .function = (_EGLProc)f}, #include "eglentrypoint.h" +#undef EGL_ENTRYPOINT2 #undef EGL_ENTRYPOINT }; _EGLProc ret = NULL; diff --git a/src/egl/main/eglentrypoint.h b/src/egl/main/eglentrypoint.h index dc67301914e..88f88e77966 100644 --- a/src/egl/main/eglentrypoint.h +++ b/src/egl/main/eglentrypoint.h @@ -1,6 +1,7 @@ /* core functions queryable in the presence of * EGL_KHR_get_all_proc_addresses or EGL 1.5 */ +/* clang-format off */ /* alphabetical order */ EGL_ENTRYPOINT(eglBindAPI) EGL_ENTRYPOINT(eglBindTexImage) @@ -36,6 +37,9 @@ EGL_ENTRYPOINT(eglDupNativeFenceFDANDROID) EGL_ENTRYPOINT(eglExportDMABUFImageMESA) EGL_ENTRYPOINT(eglExportDMABUFImageQueryMESA) EGL_ENTRYPOINT(eglExportDRMImageMESA) +EGL_ENTRYPOINT2(eglGLInteropExportObjectMESA, MesaGLInteropEGLExportObject) +EGL_ENTRYPOINT2(eglGLInteropFlushObjectsMESA, MesaGLInteropEGLFlushObjects) +EGL_ENTRYPOINT2(eglGLInteropQueryDeviceInfoMESA, MesaGLInteropEGLQueryDeviceInfo) EGL_ENTRYPOINT(eglGetConfigAttrib) EGL_ENTRYPOINT(eglGetConfigs) EGL_ENTRYPOINT(eglGetCurrentContext)