glx: Export the MESA GL Interop functions through glXGetProcAddress

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
Acked-by: Antonio Gomes <antoniospg100@gmail.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24573>
This commit is contained in:
Sylvain Munaut
2023-08-08 02:03:01 +02:00
committed by Marge Bot
parent 414c4583e8
commit 1b8d81f3f8
3 changed files with 75 additions and 0 deletions

View File

@@ -5,6 +5,8 @@
#include "glxglvnddispatchfuncs.h"
#include "g_glxglvnddispatchindices.h"
#include "GL/mesa_glinterop.h"
const int DI_FUNCTION_COUNT = DI_LAST_INDEX;
/* Allocate an extra 'dummy' to ease lookup. See FindGLXFunction() */
int __glXDispatchTableIndices[DI_LAST_INDEX + 1];
@@ -39,6 +41,9 @@ const char * const __glXDispatchTableStrings[DI_LAST_INDEX] = {
// glXDestroyPixmap implemented by libglvnd
// glXDestroyWindow implemented by libglvnd
// glXFreeContextEXT implemented by libglvnd
__ATTRIB(GLInteropExportObjectMESA),
__ATTRIB(GLInteropFlushObjectsMESA),
__ATTRIB(GLInteropQueryDeviceInfoMESA),
// glXGetClientString implemented by libglvnd
// glXGetConfig implemented by libglvnd
__ATTRIB(GetContextIDEXT),
@@ -306,6 +311,63 @@ static void dispatch_DestroyGLXPbufferSGIX(Display *dpy, GLXPbuffer pbuf)
static int dispatch_GLInteropExportObjectMESA(Display *dpy, GLXContext ctx,
struct mesa_glinterop_export_in *in,
struct mesa_glinterop_export_out *out)
{
PFNMESAGLINTEROPGLXEXPORTOBJECTPROC pGLInteropExportObjectMESA;
__GLXvendorInfo *dd;
dd = GetDispatchFromContext(ctx);
if (dd == NULL)
return 0;
__FETCH_FUNCTION_PTR(GLInteropExportObjectMESA);
if (pGLInteropExportObjectMESA == NULL)
return 0;
return pGLInteropExportObjectMESA(dpy, ctx, in, out);
}
static int dispatch_GLInteropFlushObjectsMESA(Display *dpy, GLXContext ctx,
unsigned count,
struct mesa_glinterop_export_in *resources,
GLsync *sync)
{
PFNMESAGLINTEROPGLXFLUSHOBJECTSPROC pGLInteropFlushObjectsMESA;
__GLXvendorInfo *dd;
dd = GetDispatchFromContext(ctx);
if (dd == NULL)
return 0;
__FETCH_FUNCTION_PTR(GLInteropFlushObjectsMESA);
if (pGLInteropFlushObjectsMESA == NULL)
return 0;
return pGLInteropFlushObjectsMESA(dpy, ctx, count, resources, sync);
}
static int dispatch_GLInteropQueryDeviceInfoMESA(Display *dpy, GLXContext ctx,
struct mesa_glinterop_device_info *out)
{
PFNMESAGLINTEROPGLXQUERYDEVICEINFOPROC pGLInteropQueryDeviceInfoMESA;
__GLXvendorInfo *dd;
dd = GetDispatchFromContext(ctx);
if (dd == NULL)
return 0;
__FETCH_FUNCTION_PTR(GLInteropQueryDeviceInfoMESA);
if (pGLInteropQueryDeviceInfoMESA == NULL)
return 0;
return pGLInteropQueryDeviceInfoMESA(dpy, ctx, out);
}
static GLXContextID dispatch_GetContextIDEXT(const GLXContext ctx)
{
PFNGLXGETCONTEXTIDEXTPROC pGetContextIDEXT;
@@ -981,6 +1043,9 @@ const void * const __glXDispatchFunctions[DI_LAST_INDEX + 1] = {
__ATTRIB(CreateGLXPixmapMESA),
__ATTRIB(CreateGLXPixmapWithConfigSGIX),
__ATTRIB(DestroyGLXPbufferSGIX),
__ATTRIB(GLInteropExportObjectMESA),
__ATTRIB(GLInteropFlushObjectsMESA),
__ATTRIB(GLInteropQueryDeviceInfoMESA),
__ATTRIB(GetContextIDEXT),
__ATTRIB(GetCurrentDisplayEXT),
__ATTRIB(GetDriverConfig),

View File

@@ -31,6 +31,9 @@ typedef enum __GLXdispatchIndex {
// DestroyPixmap implemented by libglvnd
// DestroyWindow implemented by libglvnd
// FreeContextEXT implemented by libglvnd
DI_GLInteropExportObjectMESA,
DI_GLInteropFlushObjectsMESA,
DI_GLInteropQueryDeviceInfoMESA,
// GetClientString implemented by libglvnd
// GetConfig implemented by libglvnd
DI_GetContextIDEXT,

View File

@@ -2339,6 +2339,13 @@ static const struct name_address_pair GLX_functions[] = {
GLX_FUNCTION(glXQueryCurrentRendererIntegerMESA),
GLX_FUNCTION(glXQueryCurrentRendererStringMESA),
/*** GLX_MESA_gl_interop ***/
#if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
GLX_FUNCTION2(glXGLInteropQueryDeviceInfoMESA, MesaGLInteropGLXQueryDeviceInfo),
GLX_FUNCTION2(glXGLInteropExportObjectMESA, MesaGLInteropGLXExportObject),
GLX_FUNCTION2(glXGLInteropFlushObjectsMESA, MesaGLInteropGLXFlushObjects),
#endif
{NULL, NULL} /* end of list */
};