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