Files
godot-angle-static/scripts/egl_angle_ext.xml
Jamie Madill dd815b623e Load correct libGLESv2 on Linux and Mac.
libEGL was implicitly loading libGLESv2 on startup. This is bad
because on platforms like Linux and Mac we could sometimes use the
incorrect rpath. This in turn meant we needed workarounds like using
"_angle" extensions to our shared objects to get the correct loading
behaviour.

Fix this by loading libGLESv2 dynamically in libEGL. We build the
loader automatically from egl.xml. The loader itself is lazily
initialized on every EGL entry point call. This is necessary because
on Linux, etc, there is no equivalent to Windows' DLLMain.

We also use an EGL.h with different generation options so we have the
proper function pointer types. A README is included for instructions
on how to regenerate EGL.h.

The entry point generation script is refactored into a helper class
that is used in the loader generator. Also adds the libGLESv2 versions
of the EGL entry points in the DEF file on Windows. This allows them to
be imported properly in 32-bit configurations.

Also fixes up some errors in ANGLE's entry point definitions. Also
includes a clang-format disable rule for the Khronos headers.

This CL will help us to run ANGLE tests against native drivers.

Bug: angleproject:2871
Change-Id: Id6ecf969308f17b1be4083538428c9c1a1836572
Reviewed-on: https://chromium-review.googlesource.com/c/1370725
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
2018-12-16 14:04:28 +00:00

102 lines
4.9 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<registry>
<comment>
Copyright 2018 The ANGLE Project Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
egl_angle_ext.xml
Includes data used to auto-generate ANGLE classes.
</comment>
<!-- SECTION: EGL command definitions. -->
<commands namespace="EGL">
<command>
<proto><ptype>EGLDeviceEXT</ptype> <name>eglCreateDeviceANGLE</name></proto>
<param><ptype>EGLint</ptype> <name>device_type</name></param>
<param>void *<name>native_device</name></param>
<param>const <ptype>EGLattrib</ptype> *<name>attrib_list</name></param>
</command>
<command>
<proto><ptype>EGLBoolean</ptype> <name>eglReleaseDeviceANGLE</name></proto>
<param><ptype>EGLDeviceEXT</ptype> <name>device</name></param>
</command>
<command>
<proto><ptype>EGLBoolean</ptype> <name>eglCreateStreamProducerD3DTextureANGLE</name></proto>
<param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
<param><ptype>EGLStreamKHR</ptype> <name>stream</name></param>
<param>const <ptype>EGLAttrib</ptype> *<name>attrib_list</name></param>
</command>
<command>
<proto><ptype>EGLBoolean</ptype> <name>eglStreamPostD3DTextureANGLE</name></proto>
<param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
<param><ptype>EGLStreamKHR</ptype> <name>stream</name></param>
<param>void *<name>texture</name></param>
<param>const <ptype>EGLAttrib</ptype> *<name>attrib_list</name></param>
</command>
<command>
<proto><ptype>EGLBoolean</ptype> <name>eglGetSyncValuesCHROMIUM</name></proto>
<param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
<param><ptype>EGLSurface</ptype> <name>surface</name></param>
<param><ptype>EGLuint64KHR</ptype> *<name>ust</name></param>
<param><ptype>EGLuint64KHR</ptype> *<name>msc</name></param>
<param><ptype>EGLuint64KHR</ptype> *<name>sbc</name></param>
</command>
<command>
<proto><ptype>EGLint</ptype> <name>eglProgramCacheGetAttribANGLE</name></proto>
<param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
<param><ptype>EGLenum</ptype> <name>attrib</name></param>
</command>
<command>
<proto>void <name>eglProgramCacheQueryANGLE</name></proto>
<param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
<param><ptype>EGLint</ptype> <name>index</name></param>
<param>void *<name>key</name></param>
<param><ptype>EGLint</ptype> *<name>keysize</name></param>
<param>void *<name>binary</name></param>
<param><ptype>EGLint</ptype> *<name>binarysize</name></param>
</command>
<command>
<proto>void <name>eglProgramCachePopulateANGLE</name></proto>
<param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
<param>const void *<name>key</name></param>
<param><ptype>EGLint</ptype> <name>keysize</name></param>
<param>const void *<name>binary</name></param>
<param><ptype>EGLint</ptype> <name>binarysize</name></param>
</command>
<command>
<proto><ptype>EGLint</ptype> <name>eglProgramCacheResizeANGLE</name></proto>
<param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
<param><ptype>EGLint</ptype> <name>limit</name></param>
<param><ptype>EGLint</ptype> <name>mode</name></param>
</command>
</commands>
<!-- SECTION: ANGLE extension interface definitions -->
<extensions>
<extension name="EGL_ANGLE_device_creation" supported="egl">
<require>
<command name="eglCreateDeviceANGLE"/>
<command name="eglReleaseDeviceANGLE"/>
</require>
</extension>
<extension name="EGL_ANGLE_stream_producer_d3d_texture" supported="egl">
<require>
<command name="eglCreateStreamProducerD3DTextureANGLE"/>
<command name="eglStreamPostD3DTextureANGLE"/>
</require>
</extension>
<extension name="EGL_CHROMIUM_get_sync_values" supported="egl">
<require>
<command name="eglGetSyncValuesCHROMIUM"/>
</require>
</extension>
<extension name="EGL_ANGLE_program_cache_control" supported="egl">
<require>
<command name="eglProgramCacheGetAttribANGLE"/>
<command name="eglProgramCacheQueryANGLE"/>
<command name="eglProgramCachePopulateANGLE"/>
<command name="eglProgramCacheResizeANGLE"/>
</require>
</extension>
</extensions>
</registry>