This totally replaces the getprocaddress and dlsym code, which was basically just stubs up until now. The is_glx/is_egl() is also dropped -- they weren't doing anything, and the only false answer they could give is if the dlopen were to fail.macos/v1.5.9
parent
111c54992b
commit
0270c80008
@ -0,0 +1,63 @@ |
|||||||
|
/*
|
||||||
|
* Copyright © 2013 Intel Corporation |
||||||
|
* |
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a |
||||||
|
* copy of this software and associated documentation files (the "Software"), |
||||||
|
* to deal in the Software without restriction, including without limitation |
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense, |
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the |
||||||
|
* Software is furnished to do so, subject to the following conditions: |
||||||
|
* |
||||||
|
* The above copyright notice and this permission notice (including the next |
||||||
|
* paragraph) shall be included in all copies or substantial portions of the |
||||||
|
* Software. |
||||||
|
* |
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
||||||
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
||||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
||||||
|
* IN THE SOFTWARE. |
||||||
|
*/ |
||||||
|
|
||||||
|
/** @file egl.h
|
||||||
|
* |
||||||
|
* Provides an implementation of a EGL dispatch layer using a hidden |
||||||
|
* vtable. |
||||||
|
* |
||||||
|
* This is a lower performance path than ifuncs when they are |
||||||
|
* available, but it is required if you might have multiple return |
||||||
|
* values for GetProcAddress/dlsym()ed functions (for example, if you |
||||||
|
* unload libGL.so.1). |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef __EPOXY_EGL_H |
||||||
|
#define __EPOXY_EGL_H |
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
extern "C" { |
||||||
|
#endif |
||||||
|
|
||||||
|
#include <stdbool.h> |
||||||
|
|
||||||
|
#if defined(__egl_h_) || defined(__eglext_h_) |
||||||
|
#error epoxy/egl.h must be included before (or in place of) GL/egl.h |
||||||
|
#else |
||||||
|
#define __egl_h_ |
||||||
|
#define __eglext_h_ |
||||||
|
#endif |
||||||
|
|
||||||
|
#pragma once |
||||||
|
|
||||||
|
#include "epoxy/egl_generated.h" |
||||||
|
#include "epoxy/egl_generated_vtable_defines.h" |
||||||
|
|
||||||
|
bool epoxy_has_egl_extension(EGLDisplay *dpy, const char *extension); |
||||||
|
int epoxy_egl_version(EGLDisplay *dpy); |
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
} /* extern "C" */ |
||||||
|
#endif |
||||||
|
|
||||||
|
#endif /* __EPOXY_EGL_H */ |
@ -0,0 +1,50 @@ |
|||||||
|
/*
|
||||||
|
* Copyright © 2013 Intel Corporation |
||||||
|
* |
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a |
||||||
|
* copy of this software and associated documentation files (the "Software"), |
||||||
|
* to deal in the Software without restriction, including without limitation |
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense, |
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the |
||||||
|
* Software is furnished to do so, subject to the following conditions: |
||||||
|
* |
||||||
|
* The above copyright notice and this permission notice (including the next |
||||||
|
* paragraph) shall be included in all copies or substantial portions of the |
||||||
|
* Software. |
||||||
|
* |
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
||||||
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
||||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
||||||
|
* IN THE SOFTWARE. |
||||||
|
*/ |
||||||
|
|
||||||
|
#include <err.h> |
||||||
|
#include <epoxy/egl.h> |
||||||
|
|
||||||
|
/**
|
||||||
|
* Do whatever it takes to get us an EGL display for the system. |
||||||
|
* |
||||||
|
* This needs to be ported to other window systems. |
||||||
|
*/ |
||||||
|
EGLDisplay * |
||||||
|
get_egl_display_or_skip(void) |
||||||
|
{ |
||||||
|
Display *dpy = XOpenDisplay(NULL); |
||||||
|
EGLint major, minor; |
||||||
|
|
||||||
|
if (!dpy) |
||||||
|
errx(77, "couldn't open display\n"); |
||||||
|
|
||||||
|
EGLDisplay *edpy = eglGetDisplay(dpy); |
||||||
|
if (!edpy) |
||||||
|
errx(1, "Couldn't get EGL display for X11 Display.\n"); |
||||||
|
|
||||||
|
bool ok = eglInitialize(edpy, &major, &minor); |
||||||
|
if (!ok) |
||||||
|
errx(1, "eglInitialize() failed\n"); |
||||||
|
|
||||||
|
return edpy; |
||||||
|
} |
@ -0,0 +1,25 @@ |
|||||||
|
/*
|
||||||
|
* Copyright © 2013 Intel Corporation |
||||||
|
* |
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a |
||||||
|
* copy of this software and associated documentation files (the "Software"), |
||||||
|
* to deal in the Software without restriction, including without limitation |
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense, |
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the |
||||||
|
* Software is furnished to do so, subject to the following conditions: |
||||||
|
* |
||||||
|
* The above copyright notice and this permission notice (including the next |
||||||
|
* paragraph) shall be included in all copies or substantial portions of the |
||||||
|
* Software. |
||||||
|
* |
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
||||||
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
||||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
||||||
|
* IN THE SOFTWARE. |
||||||
|
*/ |
||||||
|
|
||||||
|
EGLDisplay * |
||||||
|
get_egl_display_or_skip(void); |
@ -0,0 +1,70 @@ |
|||||||
|
/*
|
||||||
|
* Copyright © 2013 Intel Corporation |
||||||
|
* |
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a |
||||||
|
* copy of this software and associated documentation files (the "Software"), |
||||||
|
* to deal in the Software without restriction, including without limitation |
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense, |
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the |
||||||
|
* Software is furnished to do so, subject to the following conditions: |
||||||
|
* |
||||||
|
* The above copyright notice and this permission notice (including the next |
||||||
|
* paragraph) shall be included in all copies or substantial portions of the |
||||||
|
* Software. |
||||||
|
* |
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
||||||
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
||||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
||||||
|
* IN THE SOFTWARE. |
||||||
|
*/ |
||||||
|
|
||||||
|
/**
|
||||||
|
* @file egl_has_extension_nocontext.c |
||||||
|
* |
||||||
|
* Catches a bug in early development where eglGetProcAddress() with |
||||||
|
* no context bound would fail out in dispatch. |
||||||
|
*/ |
||||||
|
|
||||||
|
#include <stdio.h> |
||||||
|
#include <string.h> |
||||||
|
#include <stdlib.h> |
||||||
|
#include <assert.h> |
||||||
|
#include <err.h> |
||||||
|
#include "epoxy/gl.h" |
||||||
|
#include "epoxy/egl.h" |
||||||
|
|
||||||
|
#include "egl_common.h" |
||||||
|
|
||||||
|
int |
||||||
|
main(int argc, char **argv) |
||||||
|
{ |
||||||
|
bool pass = true; |
||||||
|
|
||||||
|
EGLDisplay *dpy = get_egl_display_or_skip(); |
||||||
|
const char *extensions = eglQueryString(dpy, EGL_EXTENSIONS); |
||||||
|
char *first_space; |
||||||
|
char *an_extension; |
||||||
|
|
||||||
|
/* We don't have any extensions guaranteed by the ABI, so for the
|
||||||
|
* touch test we just check if the first one is reported to be there. |
||||||
|
*/ |
||||||
|
first_space = strstr(extensions, " "); |
||||||
|
if (first_space) { |
||||||
|
an_extension = strndup(extensions, first_space - extensions); |
||||||
|
} else { |
||||||
|
an_extension = strdup(extensions); |
||||||
|
} |
||||||
|
|
||||||
|
if (!epoxy_has_egl_extension(dpy, an_extension)) |
||||||
|
errx(1, "Implementation reported absence of GLX_ARB_get_proc_address"); |
||||||
|
|
||||||
|
free(an_extension); |
||||||
|
|
||||||
|
if (epoxy_has_egl_extension(dpy, "GLX_ARB_ham_sandwich")) |
||||||
|
errx(1, "Implementation reported presence of GLX_ARB_ham_sandwich"); |
||||||
|
|
||||||
|
return pass != true; |
||||||
|
} |
Loading…
Reference in new issue