summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/libGLESv2
diff options
context:
space:
mode:
authorMiguel Costa <miguel.costa@qt.io>2018-06-26 16:56:45 +0200
committerAndre de la Rocha <andre.rocha@qt.io>2018-10-13 21:36:35 +0000
commit0a7aebadfbb3534284546aa3ca8612314c08f136 (patch)
treee94ee33ae3bb9b96fc3047c6455d47ac4920bfbf /src/3rdparty/angle/src/libGLESv2
parent656e89f875ad2008ca16cc673b687a22daa294c9 (diff)
Update ANGLE to chromium/3280
Change-Id: I0802c0d7486f772d361f87a544d6c5af937f4ca1 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Diffstat (limited to 'src/3rdparty/angle/src/libGLESv2')
-rw-r--r--src/3rdparty/angle/src/libGLESv2/entry_points_egl.cpp1516
-rw-r--r--src/3rdparty/angle/src/libGLESv2/entry_points_egl_ext.cpp784
-rw-r--r--src/3rdparty/angle/src/libGLESv2/entry_points_egl_ext.h67
-rw-r--r--src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0.cpp4155
-rw-r--r--src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0.h163
-rw-r--r--src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0_autogen.cpp2612
-rw-r--r--src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0_autogen.h297
-rw-r--r--src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0_ext.cpp2922
-rw-r--r--src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0_ext.h610
-rw-r--r--src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_0.cpp3057
-rw-r--r--src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_0.h125
-rw-r--r--src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_0_autogen.cpp2084
-rw-r--r--src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_0_autogen.h284
-rw-r--r--src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_0_ext.cpp14
-rw-r--r--src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_0_ext.h23
-rw-r--r--src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_1_autogen.cpp1430
-rw-r--r--src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_1_autogen.h228
-rw-r--r--src/3rdparty/angle/src/libGLESv2/global_state.cpp250
-rw-r--r--src/3rdparty/angle/src/libGLESv2/global_state.h28
-rw-r--r--src/3rdparty/angle/src/libGLESv2/libGLESv2.cpp1356
-rw-r--r--src/3rdparty/angle/src/libGLESv2/libGLESv2.def105
-rw-r--r--src/3rdparty/angle/src/libGLESv2/libGLESv2_mingw32.def714
-rw-r--r--src/3rdparty/angle/src/libGLESv2/libGLESv2d.def105
-rw-r--r--src/3rdparty/angle/src/libGLESv2/libGLESv2d_mingw32.def316
-rw-r--r--src/3rdparty/angle/src/libGLESv2/proc_table.h24
-rw-r--r--src/3rdparty/angle/src/libGLESv2/proc_table_autogen.cpp548
-rw-r--r--src/3rdparty/angle/src/libGLESv2/proc_table_data.json662
27 files changed, 14233 insertions, 10246 deletions
diff --git a/src/3rdparty/angle/src/libGLESv2/entry_points_egl.cpp b/src/3rdparty/angle/src/libGLESv2/entry_points_egl.cpp
index 6f9770c57c..97546ee900 100644
--- a/src/3rdparty/angle/src/libGLESv2/entry_points_egl.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/entry_points_egl.cpp
@@ -7,33 +7,59 @@
// entry_points_egl.cpp : Implements the EGL entry points.
#include "libGLESv2/entry_points_egl.h"
-#include "libGLESv2/entry_points_egl_ext.h"
-#include "libGLESv2/entry_points_gles_2_0.h"
-#include "libGLESv2/entry_points_gles_2_0_ext.h"
-#include "libGLESv2/entry_points_gles_3_0.h"
-#include "libGLESv2/global_state.h"
+#include "common/debug.h"
+#include "common/version.h"
#include "libANGLE/Context.h"
#include "libANGLE/Display.h"
-#include "libANGLE/Texture.h"
#include "libANGLE/Surface.h"
+#include "libANGLE/Texture.h"
+#include "libANGLE/Thread.h"
+#include "libANGLE/queryutils.h"
#include "libANGLE/validationEGL.h"
-
-#include "common/debug.h"
-#include "common/version.h"
+#include "libGLESv2/global_state.h"
+#include "libGLESv2/proc_table.h"
#include <EGL/eglext.h>
namespace egl
{
+namespace
+{
+
+bool CompareProc(const ProcEntry &a, const char *b)
+{
+ return strcmp(a.first, b) < 0;
+}
+
+void ClipConfigs(const std::vector<const Config *> &filteredConfigs,
+ EGLConfig *output_configs,
+ EGLint config_size,
+ EGLint *num_config)
+{
+ EGLint result_size = static_cast<EGLint>(filteredConfigs.size());
+ if (output_configs)
+ {
+ result_size = std::max(std::min(result_size, config_size), 0);
+ for (EGLint i = 0; i < result_size; i++)
+ {
+ output_configs[i] = const_cast<Config *>(filteredConfigs[i]);
+ }
+ }
+ *num_config = result_size;
+}
+
+} // anonymous namespace
+
// EGL 1.0
EGLint EGLAPIENTRY GetError(void)
{
EVENT("()");
+ Thread *thread = GetCurrentThread();
- EGLint error = GetGlobalError();
- SetGlobalError(Error(EGL_SUCCESS));
+ EGLint error = thread->getError();
+ thread->setError(NoError());
return error;
}
@@ -41,445 +67,367 @@ EGLDisplay EGLAPIENTRY GetDisplay(EGLNativeDisplayType display_id)
{
EVENT("(EGLNativeDisplayType display_id = 0x%0.8p)", display_id);
- return Display::GetDisplayFromAttribs(reinterpret_cast<void *>(display_id), AttributeMap());
+ return Display::GetDisplayFromNativeDisplay(display_id, AttributeMap());
}
EGLBoolean EGLAPIENTRY Initialize(EGLDisplay dpy, EGLint *major, EGLint *minor)
{
- EVENT("(EGLDisplay dpy = 0x%0.8p, EGLint *major = 0x%0.8p, EGLint *minor = 0x%0.8p)",
- dpy, major, minor);
+ EVENT("(EGLDisplay dpy = 0x%0.8p, EGLint *major = 0x%0.8p, EGLint *minor = 0x%0.8p)", dpy,
+ major, minor);
+ Thread *thread = GetCurrentThread();
Display *display = static_cast<Display *>(dpy);
if (dpy == EGL_NO_DISPLAY || !Display::isValidDisplay(display))
{
- SetGlobalError(Error(EGL_BAD_DISPLAY));
+ thread->setError(EglBadDisplay());
return EGL_FALSE;
}
Error error = display->initialize();
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_FALSE;
}
- if (major) *major = 1;
- if (minor) *minor = 4;
+ if (major)
+ *major = 1;
+ if (minor)
+ *minor = 4;
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return EGL_TRUE;
}
EGLBoolean EGLAPIENTRY Terminate(EGLDisplay dpy)
{
EVENT("(EGLDisplay dpy = 0x%0.8p)", dpy);
+ Thread *thread = GetCurrentThread();
Display *display = static_cast<Display *>(dpy);
if (dpy == EGL_NO_DISPLAY || !Display::isValidDisplay(display))
{
- SetGlobalError(Error(EGL_BAD_DISPLAY));
+ thread->setError(EglBadDisplay());
return EGL_FALSE;
}
- gl::Context *context = GetGlobalContext();
-
- if (display->isValidContext(context))
+ if (display->isValidContext(thread->getContext()))
{
- SetGlobalContext(NULL);
- SetGlobalDisplay(NULL);
+ thread->setCurrent(nullptr);
}
- display->terminate();
+ Error error = display->terminate();
+ if (error.isError())
+ {
+ thread->setError(error);
+ return EGL_FALSE;
+ }
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return EGL_TRUE;
}
const char *EGLAPIENTRY QueryString(EGLDisplay dpy, EGLint name)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLint name = %d)", dpy, name);
+ Thread *thread = GetCurrentThread();
- Display *display = static_cast<Display*>(dpy);
+ Display *display = static_cast<Display *>(dpy);
if (!(display == EGL_NO_DISPLAY && name == EGL_EXTENSIONS))
{
Error error = ValidateDisplay(display);
if (error.isError())
{
- SetGlobalError(error);
- return NULL;
+ thread->setError(error);
+ return nullptr;
}
}
const char *result;
switch (name)
{
- case EGL_CLIENT_APIS:
- result = "OpenGL_ES";
- break;
- case EGL_EXTENSIONS:
- if (display == EGL_NO_DISPLAY)
- {
- result = Display::getClientExtensionString().c_str();
- }
- else
- {
- result = display->getExtensionString().c_str();
- }
- break;
- case EGL_VENDOR:
- result = display->getVendorString().c_str();
- break;
- case EGL_VERSION:
- result = "1.4 (ANGLE " ANGLE_VERSION_STRING ")";
- break;
- default:
- SetGlobalError(Error(EGL_BAD_PARAMETER));
- return NULL;
- }
-
- SetGlobalError(Error(EGL_SUCCESS));
+ case EGL_CLIENT_APIS:
+ result = "OpenGL_ES";
+ break;
+ case EGL_EXTENSIONS:
+ if (display == EGL_NO_DISPLAY)
+ {
+ result = Display::GetClientExtensionString().c_str();
+ }
+ else
+ {
+ result = display->getExtensionString().c_str();
+ }
+ break;
+ case EGL_VENDOR:
+ result = display->getVendorString().c_str();
+ break;
+ case EGL_VERSION:
+ result = "1.4 (ANGLE " ANGLE_VERSION_STRING ")";
+ break;
+ default:
+ thread->setError(EglBadParameter());
+ return nullptr;
+ }
+
+ thread->setError(NoError());
return result;
}
-EGLBoolean EGLAPIENTRY GetConfigs(EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config)
+EGLBoolean EGLAPIENTRY GetConfigs(EGLDisplay dpy,
+ EGLConfig *configs,
+ EGLint config_size,
+ EGLint *num_config)
{
- EVENT("(EGLDisplay dpy = 0x%0.8p, EGLConfig *configs = 0x%0.8p, "
- "EGLint config_size = %d, EGLint *num_config = 0x%0.8p)",
- dpy, configs, config_size, num_config);
+ EVENT(
+ "(EGLDisplay dpy = 0x%0.8p, EGLConfig *configs = 0x%0.8p, "
+ "EGLint config_size = %d, EGLint *num_config = 0x%0.8p)",
+ dpy, configs, config_size, num_config);
+ Thread *thread = GetCurrentThread();
- Display *display = static_cast<Display*>(dpy);
+ Display *display = static_cast<Display *>(dpy);
- Error error = ValidateDisplay(display);
+ Error error = ValidateGetConfigs(display, config_size, num_config);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_FALSE;
}
- if (!num_config)
- {
- SetGlobalError(Error(EGL_BAD_PARAMETER));
- return EGL_FALSE;
- }
+ ClipConfigs(display->getConfigs(AttributeMap()), configs, config_size, num_config);
- std::vector<const Config*> filteredConfigs = display->getConfigs(AttributeMap());
- if (configs)
- {
- filteredConfigs.resize(std::min<size_t>(filteredConfigs.size(), config_size));
- for (size_t i = 0; i < filteredConfigs.size(); i++)
- {
- configs[i] = const_cast<Config*>(filteredConfigs[i]);
- }
- }
- *num_config = static_cast<EGLint>(filteredConfigs.size());
-
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return EGL_TRUE;
}
-EGLBoolean EGLAPIENTRY ChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config)
+EGLBoolean EGLAPIENTRY ChooseConfig(EGLDisplay dpy,
+ const EGLint *attrib_list,
+ EGLConfig *configs,
+ EGLint config_size,
+ EGLint *num_config)
{
- EVENT("(EGLDisplay dpy = 0x%0.8p, const EGLint *attrib_list = 0x%0.8p, "
- "EGLConfig *configs = 0x%0.8p, EGLint config_size = %d, EGLint *num_config = 0x%0.8p)",
- dpy, attrib_list, configs, config_size, num_config);
+ EVENT(
+ "(EGLDisplay dpy = 0x%0.8p, const EGLint *attrib_list = 0x%0.8p, "
+ "EGLConfig *configs = 0x%0.8p, EGLint config_size = %d, EGLint *num_config = 0x%0.8p)",
+ dpy, attrib_list, configs, config_size, num_config);
+ Thread *thread = GetCurrentThread();
- Display *display = static_cast<Display*>(dpy);
+ Display *display = static_cast<Display *>(dpy);
+ AttributeMap attribMap = AttributeMap::CreateFromIntArray(attrib_list);
- Error error = ValidateDisplay(display);
+ Error error = ValidateChooseConfig(display, attribMap, config_size, num_config);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_FALSE;
}
- if (!num_config)
- {
- SetGlobalError(Error(EGL_BAD_PARAMETER));
- return EGL_FALSE;
- }
-
- std::vector<const Config*> filteredConfigs = display->getConfigs(AttributeMap(attrib_list));
- if (configs)
- {
- filteredConfigs.resize(std::min<size_t>(filteredConfigs.size(), config_size));
- for (size_t i = 0; i < filteredConfigs.size(); i++)
- {
- configs[i] = const_cast<Config*>(filteredConfigs[i]);
- }
- }
- *num_config = static_cast<EGLint>(filteredConfigs.size());
+ ClipConfigs(display->getConfigs(attribMap), configs, config_size, num_config);
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return EGL_TRUE;
}
-EGLBoolean EGLAPIENTRY GetConfigAttrib(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value)
+EGLBoolean EGLAPIENTRY GetConfigAttrib(EGLDisplay dpy,
+ EGLConfig config,
+ EGLint attribute,
+ EGLint *value)
{
- EVENT("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, EGLint attribute = %d, EGLint *value = 0x%0.8p)",
- dpy, config, attribute, value);
+ EVENT(
+ "(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, EGLint attribute = %d, EGLint "
+ "*value = 0x%0.8p)",
+ dpy, config, attribute, value);
+ Thread *thread = GetCurrentThread();
- Display *display = static_cast<Display*>(dpy);
- Config *configuration = static_cast<Config*>(config);
+ Display *display = static_cast<Display *>(dpy);
+ Config *configuration = static_cast<Config *>(config);
- Error error = ValidateConfig(display, configuration);
+ Error error = ValidateGetConfigAttrib(display, configuration, attribute);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_FALSE;
}
- if (!display->getConfigAttrib(configuration, attribute, value))
- {
- SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
- return EGL_FALSE;
- }
+ QueryConfigAttrib(configuration, attribute, value);
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return EGL_TRUE;
}
-EGLSurface EGLAPIENTRY CreateWindowSurface(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list)
+EGLSurface EGLAPIENTRY CreateWindowSurface(EGLDisplay dpy,
+ EGLConfig config,
+ EGLNativeWindowType win,
+ const EGLint *attrib_list)
{
- EVENT("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, EGLNativeWindowType win = 0x%0.8p, "
- "const EGLint *attrib_list = 0x%0.8p)", dpy, config, win, attrib_list);
+ EVENT(
+ "(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, EGLNativeWindowType win = 0x%0.8p, "
+ "const EGLint *attrib_list = 0x%0.8p)",
+ dpy, config, win, attrib_list);
+ Thread *thread = GetCurrentThread();
- Display *display = static_cast<Display*>(dpy);
- Config *configuration = static_cast<Config*>(config);
- AttributeMap attributes(attrib_list);
+ Display *display = static_cast<Display *>(dpy);
+ Config *configuration = static_cast<Config *>(config);
+ AttributeMap attributes = AttributeMap::CreateFromIntArray(attrib_list);
Error error = ValidateCreateWindowSurface(display, configuration, win, attributes);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_NO_SURFACE;
}
egl::Surface *surface = nullptr;
- error = display->createWindowSurface(configuration, win, attributes, &surface);
+ error = display->createWindowSurface(configuration, win, attributes, &surface);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_NO_SURFACE;
}
return static_cast<EGLSurface>(surface);
}
-EGLSurface EGLAPIENTRY CreatePbufferSurface(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list)
+EGLSurface EGLAPIENTRY CreatePbufferSurface(EGLDisplay dpy,
+ EGLConfig config,
+ const EGLint *attrib_list)
{
- EVENT("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, const EGLint *attrib_list = 0x%0.8p)",
- dpy, config, attrib_list);
+ EVENT(
+ "(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, const EGLint *attrib_list = "
+ "0x%0.8p)",
+ dpy, config, attrib_list);
+ Thread *thread = GetCurrentThread();
- Display *display = static_cast<Display*>(dpy);
- Config *configuration = static_cast<Config*>(config);
- AttributeMap attributes(attrib_list);
+ Display *display = static_cast<Display *>(dpy);
+ Config *configuration = static_cast<Config *>(config);
+ AttributeMap attributes = AttributeMap::CreateFromIntArray(attrib_list);
Error error = ValidateCreatePbufferSurface(display, configuration, attributes);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_NO_SURFACE;
}
egl::Surface *surface = nullptr;
- error = display->createPbufferSurface(configuration, attributes, &surface);
+ error = display->createPbufferSurface(configuration, attributes, &surface);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_NO_SURFACE;
}
return static_cast<EGLSurface>(surface);
}
-EGLSurface EGLAPIENTRY CreatePixmapSurface(EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list)
+EGLSurface EGLAPIENTRY CreatePixmapSurface(EGLDisplay dpy,
+ EGLConfig config,
+ EGLNativePixmapType pixmap,
+ const EGLint *attrib_list)
{
- EVENT("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, EGLNativePixmapType pixmap = 0x%0.8p, "
- "const EGLint *attrib_list = 0x%0.8p)", dpy, config, pixmap, attrib_list);
+ EVENT(
+ "(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, EGLNativePixmapType pixmap = "
+ "0x%0.8p, "
+ "const EGLint *attrib_list = 0x%0.8p)",
+ dpy, config, pixmap, attrib_list);
+ Thread *thread = GetCurrentThread();
- Display *display = static_cast<Display*>(dpy);
- Config *configuration = static_cast<Config*>(config);
+ Display *display = static_cast<Display *>(dpy);
+ Config *configuration = static_cast<Config *>(config);
Error error = ValidateConfig(display, configuration);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_NO_SURFACE;
}
- UNIMPLEMENTED(); // FIXME
+ UNIMPLEMENTED(); // FIXME
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return EGL_NO_SURFACE;
}
EGLBoolean EGLAPIENTRY DestroySurface(EGLDisplay dpy, EGLSurface surface)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p)", dpy, surface);
+ Thread *thread = GetCurrentThread();
- Display *display = static_cast<Display*>(dpy);
- Surface *eglSurface = static_cast<Surface*>(surface);
+ Display *display = static_cast<Display *>(dpy);
+ Surface *eglSurface = static_cast<Surface *>(surface);
Error error = ValidateSurface(display, eglSurface);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_FALSE;
}
if (surface == EGL_NO_SURFACE)
{
- SetGlobalError(Error(EGL_BAD_SURFACE));
+ thread->setError(EglBadSurface());
return EGL_FALSE;
}
- display->destroySurface((Surface*)surface);
+ error = display->destroySurface(reinterpret_cast<Surface *>(surface));
+ if (error.isError())
+ {
+ thread->setError(error);
+ return EGL_FALSE;
+ }
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return EGL_TRUE;
}
-EGLBoolean EGLAPIENTRY QuerySurface(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value)
+EGLBoolean EGLAPIENTRY QuerySurface(EGLDisplay dpy,
+ EGLSurface surface,
+ EGLint attribute,
+ EGLint *value)
{
- EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint attribute = %d, EGLint *value = 0x%0.8p)",
- dpy, surface, attribute, value);
+ EVENT(
+ "(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint attribute = %d, EGLint "
+ "*value = 0x%0.8p)",
+ dpy, surface, attribute, value);
+ Thread *thread = GetCurrentThread();
- Display *display = static_cast<Display*>(dpy);
- Surface *eglSurface = (Surface*)surface;
+ const Display *display = static_cast<const Display *>(dpy);
+ const Surface *eglSurface = static_cast<const Surface *>(surface);
- Error error = ValidateSurface(display, eglSurface);
+ Error error = ValidateQuerySurface(display, eglSurface, attribute, value);
if (error.isError())
{
- SetGlobalError(error);
- return EGL_FALSE;
- }
-
- if (surface == EGL_NO_SURFACE)
- {
- SetGlobalError(Error(EGL_BAD_SURFACE));
+ thread->setError(error);
return EGL_FALSE;
}
- switch (attribute)
- {
- case EGL_VG_ALPHA_FORMAT:
- UNIMPLEMENTED(); // FIXME
- break;
- case EGL_VG_COLORSPACE:
- UNIMPLEMENTED(); // FIXME
- break;
- case EGL_CONFIG_ID:
- *value = eglSurface->getConfig()->configID;
- break;
- case EGL_HEIGHT:
- *value = eglSurface->getHeight();
- break;
- case EGL_HORIZONTAL_RESOLUTION:
- UNIMPLEMENTED(); // FIXME
- break;
- case EGL_LARGEST_PBUFFER:
- UNIMPLEMENTED(); // FIXME
- break;
- case EGL_MIPMAP_TEXTURE:
- UNIMPLEMENTED(); // FIXME
- break;
- case EGL_MIPMAP_LEVEL:
- UNIMPLEMENTED(); // FIXME
- break;
- case EGL_MULTISAMPLE_RESOLVE:
- UNIMPLEMENTED(); // FIXME
- break;
- case EGL_PIXEL_ASPECT_RATIO:
- *value = eglSurface->getPixelAspectRatio();
- break;
- case EGL_RENDER_BUFFER:
- *value = eglSurface->getRenderBuffer();
- break;
- case EGL_SWAP_BEHAVIOR:
- *value = eglSurface->getSwapBehavior();
- break;
- case EGL_TEXTURE_FORMAT:
- *value = eglSurface->getTextureFormat();
- break;
- case EGL_TEXTURE_TARGET:
- *value = eglSurface->getTextureTarget();
- break;
- case EGL_VERTICAL_RESOLUTION:
- UNIMPLEMENTED(); // FIXME
- break;
- case EGL_WIDTH:
- *value = eglSurface->getWidth();
- break;
- case EGL_POST_SUB_BUFFER_SUPPORTED_NV:
- if (!display->getExtensions().postSubBuffer)
- {
- SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
- return EGL_FALSE;
- }
- *value = eglSurface->isPostSubBufferSupported();
- break;
- case EGL_FIXED_SIZE_ANGLE:
- if (!display->getExtensions().windowFixedSize)
- {
- SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
- return EGL_FALSE;
- }
- *value = eglSurface->isFixedSize();
- break;
- case EGL_FLEXIBLE_SURFACE_COMPATIBILITY_SUPPORTED_ANGLE:
- if (!display->getExtensions().flexibleSurfaceCompatibility)
- {
- SetGlobalError(
- Error(EGL_BAD_ATTRIBUTE,
- "EGL_FLEXIBLE_SURFACE_COMPATIBILITY_SUPPORTED_ANGLE cannot be used without "
- "EGL_ANGLE_flexible_surface_compatibility support."));
- return EGL_FALSE;
- }
- *value = eglSurface->flexibleSurfaceCompatibilityRequested();
- break;
- case EGL_SURFACE_ORIENTATION_ANGLE:
- if (!display->getExtensions().surfaceOrientation)
- {
- SetGlobalError(Error(EGL_BAD_ATTRIBUTE,
- "EGL_SURFACE_ORIENTATION_ANGLE cannot be queried without "
- "EGL_ANGLE_surface_orientation support."));
- return EGL_FALSE;
- }
- *value = eglSurface->getOrientation();
- break;
- case EGL_DIRECT_COMPOSITION_ANGLE:
- if (!display->getExtensions().directComposition)
- {
- SetGlobalError(Error(EGL_BAD_ATTRIBUTE,
- "EGL_DIRECT_COMPOSITION_ANGLE cannot be used without "
- "EGL_ANGLE_direct_composition support."));
- return EGL_FALSE;
- }
- *value = eglSurface->directComposition();
- break;
- default:
- SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
- return EGL_FALSE;
- }
+ QuerySurfaceAttrib(eglSurface, attribute, value);
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return EGL_TRUE;
}
-EGLContext EGLAPIENTRY CreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list)
+EGLContext EGLAPIENTRY CreateContext(EGLDisplay dpy,
+ EGLConfig config,
+ EGLContext share_context,
+ const EGLint *attrib_list)
{
- EVENT("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, EGLContext share_context = 0x%0.8p, "
- "const EGLint *attrib_list = 0x%0.8p)", dpy, config, share_context, attrib_list);
-
- Display *display = static_cast<Display*>(dpy);
- Config *configuration = static_cast<Config*>(config);
- gl::Context* sharedGLContext = static_cast<gl::Context*>(share_context);
- AttributeMap attributes(attrib_list);
+ EVENT(
+ "(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, EGLContext share_context = "
+ "0x%0.8p, "
+ "const EGLint *attrib_list = 0x%0.8p)",
+ dpy, config, share_context, attrib_list);
+ Thread *thread = GetCurrentThread();
+
+ Display *display = static_cast<Display *>(dpy);
+ Config *configuration = static_cast<Config *>(config);
+ gl::Context *sharedGLContext = static_cast<gl::Context *>(share_context);
+ AttributeMap attributes = AttributeMap::CreateFromIntArray(attrib_list);
Error error = ValidateCreateContext(display, configuration, sharedGLContext, attributes);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_NO_CONTEXT;
}
@@ -487,208 +435,115 @@ EGLContext EGLAPIENTRY CreateContext(EGLDisplay dpy, EGLConfig config, EGLContex
error = display->createContext(configuration, sharedGLContext, attributes, &context);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_NO_CONTEXT;
}
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return static_cast<EGLContext>(context);
}
EGLBoolean EGLAPIENTRY DestroyContext(EGLDisplay dpy, EGLContext ctx)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLContext ctx = 0x%0.8p)", dpy, ctx);
+ Thread *thread = GetCurrentThread();
- Display *display = static_cast<Display*>(dpy);
- gl::Context *context = static_cast<gl::Context*>(ctx);
+ Display *display = static_cast<Display *>(dpy);
+ gl::Context *context = static_cast<gl::Context *>(ctx);
Error error = ValidateContext(display, context);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_FALSE;
}
if (ctx == EGL_NO_CONTEXT)
{
- SetGlobalError(Error(EGL_BAD_CONTEXT));
+ thread->setError(EglBadContext());
return EGL_FALSE;
}
- if (context == GetGlobalContext())
+ if (context == thread->getContext())
{
- SetGlobalDisplay(NULL);
- SetGlobalContext(NULL);
+ thread->setCurrent(nullptr);
}
- display->destroyContext(context);
+ error = display->destroyContext(context);
+ if (error.isError())
+ {
+ thread->setError(error);
+ return EGL_FALSE;
+ }
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return EGL_TRUE;
}
EGLBoolean EGLAPIENTRY MakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx)
{
- EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface draw = 0x%0.8p, EGLSurface read = 0x%0.8p, EGLContext ctx = 0x%0.8p)",
- dpy, draw, read, ctx);
-
- Display *display = static_cast<Display*>(dpy);
- gl::Context *context = static_cast<gl::Context*>(ctx);
-
- // If ctx is EGL_NO_CONTEXT and either draw or read are not EGL_NO_SURFACE, an EGL_BAD_MATCH
- // error is generated.
- if (ctx == EGL_NO_CONTEXT && (draw != EGL_NO_SURFACE || read != EGL_NO_SURFACE))
- {
- SetGlobalError(Error(EGL_BAD_MATCH));
- return EGL_FALSE;
- }
-
- if (ctx != EGL_NO_CONTEXT && draw == EGL_NO_SURFACE && read == EGL_NO_SURFACE)
- {
- SetGlobalError(Error(EGL_BAD_MATCH));
- return EGL_FALSE;
- }
-
- // If either of draw or read is a valid surface and the other is EGL_NO_SURFACE, an
- // EGL_BAD_MATCH error is generated.
- if ((read == EGL_NO_SURFACE) != (draw == EGL_NO_SURFACE))
- {
- SetGlobalError(Error(
- EGL_BAD_MATCH, "read and draw must both be valid surfaces, or both be EGL_NO_SURFACE"));
- return EGL_FALSE;
- }
+ EVENT(
+ "(EGLDisplay dpy = 0x%0.8p, EGLSurface draw = 0x%0.8p, EGLSurface read = 0x%0.8p, "
+ "EGLContext ctx = 0x%0.8p)",
+ dpy, draw, read, ctx);
+ Thread *thread = GetCurrentThread();
- if (dpy == EGL_NO_DISPLAY || !Display::isValidDisplay(display))
- {
- SetGlobalError(Error(EGL_BAD_DISPLAY, "'dpy' not a valid EGLDisplay handle"));
- return EGL_FALSE;
- }
+ Display *display = static_cast<Display *>(dpy);
+ gl::Context *context = static_cast<gl::Context *>(ctx);
- // EGL 1.5 spec: dpy can be uninitialized if all other parameters are null
- if (!display->isInitialized() && (ctx != EGL_NO_CONTEXT || draw != EGL_NO_SURFACE || read != EGL_NO_SURFACE))
+ Error error = ValidateMakeCurrent(display, draw, read, context);
+ if (error.isError())
{
- SetGlobalError(Error(EGL_NOT_INITIALIZED, "'dpy' not initialized"));
+ thread->setError(error);
return EGL_FALSE;
}
- if (ctx != EGL_NO_CONTEXT)
- {
- Error error = ValidateContext(display, context);
- if (error.isError())
- {
- SetGlobalError(error);
- return EGL_FALSE;
- }
- }
-
- if (display->isInitialized())
- {
- if (display->testDeviceLost())
- {
- display->notifyDeviceLost();
- return EGL_FALSE;
- }
-
- if (display->isDeviceLost())
- {
- SetGlobalError(Error(EGL_CONTEXT_LOST));
- return EGL_FALSE;
- }
- }
-
- Surface *drawSurface = static_cast<Surface*>(draw);
- if (draw != EGL_NO_SURFACE)
- {
- Error error = ValidateSurface(display, drawSurface);
- if (error.isError())
- {
- SetGlobalError(error);
- return EGL_FALSE;
- }
- }
-
- Surface *readSurface = static_cast<Surface*>(read);
- if (read != EGL_NO_SURFACE)
- {
- Error error = ValidateSurface(display, readSurface);
- if (error.isError())
- {
- SetGlobalError(error);
- return EGL_FALSE;
- }
- }
-
- if (readSurface)
- {
- Error readCompatError =
- ValidateCompatibleConfigs(display, readSurface->getConfig(), readSurface,
- context->getConfig(), readSurface->getType());
- if (readCompatError.isError())
- {
- SetGlobalError(readCompatError);
- return EGL_FALSE;
- }
- }
-
- if (draw != read)
- {
- UNIMPLEMENTED(); // FIXME
-
- if (drawSurface)
- {
- Error drawCompatError =
- ValidateCompatibleConfigs(display, drawSurface->getConfig(), drawSurface,
- context->getConfig(), drawSurface->getType());
- if (drawCompatError.isError())
- {
- SetGlobalError(drawCompatError);
- return EGL_FALSE;
- }
- }
- }
-
+ Surface *readSurface = static_cast<Surface *>(read);
+ Surface *drawSurface = static_cast<Surface *>(draw);
Error makeCurrentError = display->makeCurrent(drawSurface, readSurface, context);
if (makeCurrentError.isError())
{
- SetGlobalError(makeCurrentError);
+ thread->setError(makeCurrentError);
return EGL_FALSE;
}
- gl::Context *previousContext = GetGlobalContext();
-
- SetGlobalDisplay(display);
- SetGlobalDrawSurface(drawSurface);
- SetGlobalReadSurface(readSurface);
- SetGlobalContext(context);
+ gl::Context *previousContext = thread->getContext();
+ thread->setCurrent(context);
// Release the surface from the previously-current context, to allow
// destroyed surfaces to delete themselves.
if (previousContext != nullptr && context != previousContext)
{
- previousContext->releaseSurface();
+ auto err = previousContext->releaseSurface(display);
+ if (err.isError())
+ {
+ thread->setError(err);
+ return EGL_FALSE;
+ }
}
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return EGL_TRUE;
}
EGLSurface EGLAPIENTRY GetCurrentSurface(EGLint readdraw)
{
EVENT("(EGLint readdraw = %d)", readdraw);
+ Thread *thread = GetCurrentThread();
if (readdraw == EGL_READ)
{
- SetGlobalError(Error(EGL_SUCCESS));
- return GetGlobalReadSurface();
+ thread->setError(NoError());
+ return thread->getCurrentReadSurface();
}
else if (readdraw == EGL_DRAW)
{
- SetGlobalError(Error(EGL_SUCCESS));
- return GetGlobalDrawSurface();
+ thread->setError(NoError());
+ return thread->getCurrentDrawSurface();
}
else
{
- SetGlobalError(Error(EGL_BAD_PARAMETER));
+ thread->setError(EglBadParameter());
return EGL_NO_SURFACE;
}
}
@@ -696,283 +551,294 @@ EGLSurface EGLAPIENTRY GetCurrentSurface(EGLint readdraw)
EGLDisplay EGLAPIENTRY GetCurrentDisplay(void)
{
EVENT("()");
+ Thread *thread = GetCurrentThread();
- EGLDisplay dpy = GetGlobalDisplay();
-
- SetGlobalError(Error(EGL_SUCCESS));
- return dpy;
+ thread->setError(NoError());
+ if (thread->getContext() != nullptr)
+ {
+ return thread->getContext()->getCurrentDisplay();
+ }
+ return EGL_NO_DISPLAY;
}
EGLBoolean EGLAPIENTRY QueryContext(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value)
{
- EVENT("(EGLDisplay dpy = 0x%0.8p, EGLContext ctx = 0x%0.8p, EGLint attribute = %d, EGLint *value = 0x%0.8p)",
- dpy, ctx, attribute, value);
+ EVENT(
+ "(EGLDisplay dpy = 0x%0.8p, EGLContext ctx = 0x%0.8p, EGLint attribute = %d, EGLint *value "
+ "= 0x%0.8p)",
+ dpy, ctx, attribute, value);
+ Thread *thread = GetCurrentThread();
- Display *display = static_cast<Display*>(dpy);
- gl::Context *context = static_cast<gl::Context*>(ctx);
+ Display *display = static_cast<Display *>(dpy);
+ gl::Context *context = static_cast<gl::Context *>(ctx);
- Error error = ValidateContext(display, context);
+ Error error = ValidateQueryContext(display, context, attribute, value);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_FALSE;
}
- switch (attribute)
- {
- case EGL_CONFIG_ID:
- *value = context->getConfig()->configID;
- break;
- case EGL_CONTEXT_CLIENT_TYPE:
- *value = context->getClientType();
- break;
- case EGL_CONTEXT_CLIENT_VERSION:
- *value = context->getClientVersion();
- break;
- case EGL_RENDER_BUFFER:
- *value = context->getRenderBuffer();
- break;
- default:
- SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
- return EGL_FALSE;
- }
+ QueryContextAttrib(context, attribute, value);
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return EGL_TRUE;
}
EGLBoolean EGLAPIENTRY WaitGL(void)
{
EVENT("()");
+ Thread *thread = GetCurrentThread();
- Display *display = GetGlobalDisplay();
+ Display *display = thread->getCurrentDisplay();
Error error = ValidateDisplay(display);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_FALSE;
}
// eglWaitGL like calling eglWaitClient with the OpenGL ES API bound. Since we only implement
// OpenGL ES we can do the call directly.
- error = display->waitClient();
+ error = display->waitClient(thread->getContext());
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_FALSE;
}
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return EGL_TRUE;
}
EGLBoolean EGLAPIENTRY WaitNative(EGLint engine)
{
EVENT("(EGLint engine = %d)", engine);
+ Thread *thread = GetCurrentThread();
- Display *display = GetGlobalDisplay();
+ Display *display = thread->getCurrentDisplay();
Error error = ValidateDisplay(display);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_FALSE;
}
if (engine != EGL_CORE_NATIVE_ENGINE)
{
- SetGlobalError(
- Error(EGL_BAD_PARAMETER, "the 'engine' parameter has an unrecognized value"));
+ thread->setError(EglBadParameter() << "the 'engine' parameter has an unrecognized value");
}
- error = display->waitNative(engine, GetGlobalDrawSurface(), GetGlobalReadSurface());
+ error = display->waitNative(thread->getContext(), engine);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_FALSE;
}
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return EGL_TRUE;
}
EGLBoolean EGLAPIENTRY SwapBuffers(EGLDisplay dpy, EGLSurface surface)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p)", dpy, surface);
+ Thread *thread = GetCurrentThread();
- Display *display = static_cast<Display*>(dpy);
- Surface *eglSurface = (Surface*)surface;
+ Display *display = static_cast<Display *>(dpy);
+ Surface *eglSurface = (Surface *)surface;
Error error = ValidateSurface(display, eglSurface);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_FALSE;
}
- if (display->isDeviceLost())
+ if (display->testDeviceLost())
{
- SetGlobalError(Error(EGL_CONTEXT_LOST));
+ thread->setError(EglContextLost());
return EGL_FALSE;
}
if (surface == EGL_NO_SURFACE)
{
- SetGlobalError(Error(EGL_BAD_SURFACE));
+ thread->setError(EglBadSurface());
return EGL_FALSE;
}
- error = eglSurface->swap();
+ if (!thread->getContext() || thread->getCurrentDrawSurface() != eglSurface)
+ {
+ thread->setError(EglBadSurface());
+ return EGL_FALSE;
+ }
+
+ error = eglSurface->swap(thread->getContext());
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_FALSE;
}
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return EGL_TRUE;
}
EGLBoolean EGLAPIENTRY CopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target)
{
- EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLNativePixmapType target = 0x%0.8p)", dpy, surface, target);
+ EVENT(
+ "(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLNativePixmapType target = "
+ "0x%0.8p)",
+ dpy, surface, target);
+ Thread *thread = GetCurrentThread();
- Display *display = static_cast<Display*>(dpy);
- Surface *eglSurface = static_cast<Surface*>(surface);
+ Display *display = static_cast<Display *>(dpy);
+ Surface *eglSurface = static_cast<Surface *>(surface);
Error error = ValidateSurface(display, eglSurface);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_FALSE;
}
- if (display->isDeviceLost())
+ if (display->testDeviceLost())
{
- SetGlobalError(Error(EGL_CONTEXT_LOST));
+ thread->setError(EglContextLost());
return EGL_FALSE;
}
- UNIMPLEMENTED(); // FIXME
+ UNIMPLEMENTED(); // FIXME
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return 0;
}
// EGL 1.1
EGLBoolean EGLAPIENTRY BindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer)
{
- EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint buffer = %d)", dpy, surface, buffer);
+ EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint buffer = %d)", dpy,
+ surface, buffer);
+ Thread *thread = GetCurrentThread();
- Display *display = static_cast<Display*>(dpy);
- Surface *eglSurface = static_cast<Surface*>(surface);
+ Display *display = static_cast<Display *>(dpy);
+ Surface *eglSurface = static_cast<Surface *>(surface);
Error error = ValidateSurface(display, eglSurface);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_FALSE;
}
if (buffer != EGL_BACK_BUFFER)
{
- SetGlobalError(Error(EGL_BAD_PARAMETER));
+ thread->setError(EglBadParameter());
return EGL_FALSE;
}
if (surface == EGL_NO_SURFACE || eglSurface->getType() == EGL_WINDOW_BIT)
{
- SetGlobalError(Error(EGL_BAD_SURFACE));
+ thread->setError(EglBadSurface());
return EGL_FALSE;
}
if (eglSurface->getBoundTexture())
{
- SetGlobalError(Error(EGL_BAD_ACCESS));
+ thread->setError(EglBadAccess());
return EGL_FALSE;
}
if (eglSurface->getTextureFormat() == EGL_NO_TEXTURE)
{
- SetGlobalError(Error(EGL_BAD_MATCH));
+ thread->setError(EglBadMatch());
return EGL_FALSE;
}
- gl::Context *context = GetGlobalContext();
+ gl::Context *context = thread->getContext();
if (context)
{
gl::Texture *textureObject = context->getTargetTexture(GL_TEXTURE_2D);
- ASSERT(textureObject != NULL);
+ ASSERT(textureObject != nullptr);
if (textureObject->getImmutableFormat())
{
- SetGlobalError(Error(EGL_BAD_MATCH));
+ thread->setError(EglBadMatch());
return EGL_FALSE;
}
- error = eglSurface->bindTexImage(textureObject, buffer);
+ error = eglSurface->bindTexImage(context, textureObject, buffer);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_FALSE;
}
}
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return EGL_TRUE;
}
-EGLBoolean EGLAPIENTRY SurfaceAttrib(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value)
+EGLBoolean EGLAPIENTRY SurfaceAttrib(EGLDisplay dpy,
+ EGLSurface surface,
+ EGLint attribute,
+ EGLint value)
{
- EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint attribute = %d, EGLint value = %d)",
+ EVENT(
+ "(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint attribute = %d, EGLint "
+ "value = %d)",
dpy, surface, attribute, value);
+ Thread *thread = GetCurrentThread();
- Display *display = static_cast<Display*>(dpy);
- Surface *eglSurface = static_cast<Surface*>(surface);
+ Display *display = static_cast<Display *>(dpy);
+ Surface *eglSurface = static_cast<Surface *>(surface);
- Error error = ValidateSurface(display, eglSurface);
+ Error error = ValidateSurfaceAttrib(display, eglSurface, attribute, value);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_FALSE;
}
- UNIMPLEMENTED(); // FIXME
+ SetSurfaceAttrib(eglSurface, attribute, value);
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return EGL_TRUE;
}
EGLBoolean EGLAPIENTRY ReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer)
{
- EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint buffer = %d)", dpy, surface, buffer);
+ EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint buffer = %d)", dpy,
+ surface, buffer);
+ Thread *thread = GetCurrentThread();
- Display *display = static_cast<Display*>(dpy);
- Surface *eglSurface = static_cast<Surface*>(surface);
+ Display *display = static_cast<Display *>(dpy);
+ Surface *eglSurface = static_cast<Surface *>(surface);
Error error = ValidateSurface(display, eglSurface);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_FALSE;
}
if (buffer != EGL_BACK_BUFFER)
{
- SetGlobalError(Error(EGL_BAD_PARAMETER));
+ thread->setError(EglBadParameter());
return EGL_FALSE;
}
if (surface == EGL_NO_SURFACE || eglSurface->getType() == EGL_WINDOW_BIT)
{
- SetGlobalError(Error(EGL_BAD_SURFACE));
+ thread->setError(EglBadSurface());
return EGL_FALSE;
}
if (eglSurface->getTextureFormat() == EGL_NO_TEXTURE)
{
- SetGlobalError(Error(EGL_BAD_MATCH));
+ thread->setError(EglBadMatch());
return EGL_FALSE;
}
@@ -980,105 +846,116 @@ EGLBoolean EGLAPIENTRY ReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLin
if (texture)
{
- error = eglSurface->releaseTexImage(buffer);
+ error = eglSurface->releaseTexImage(thread->getContext(), buffer);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_FALSE;
}
}
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return EGL_TRUE;
}
EGLBoolean EGLAPIENTRY SwapInterval(EGLDisplay dpy, EGLint interval)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLint interval = %d)", dpy, interval);
+ Thread *thread = GetCurrentThread();
- Display *display = static_cast<Display*>(dpy);
+ Display *display = static_cast<Display *>(dpy);
Error error = ValidateDisplay(display);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_FALSE;
}
- Surface *draw_surface = static_cast<Surface*>(GetGlobalDrawSurface());
+ Surface *draw_surface = static_cast<Surface *>(thread->getCurrentDrawSurface());
- if (draw_surface == NULL)
+ if (draw_surface == nullptr)
{
- SetGlobalError(Error(EGL_BAD_SURFACE));
+ thread->setError(EglBadSurface());
return EGL_FALSE;
}
const egl::Config *surfaceConfig = draw_surface->getConfig();
- EGLint clampedInterval = std::min(std::max(interval, surfaceConfig->minSwapInterval), surfaceConfig->maxSwapInterval);
+ EGLint clampedInterval = std::min(std::max(interval, surfaceConfig->minSwapInterval),
+ surfaceConfig->maxSwapInterval);
draw_surface->setSwapInterval(clampedInterval);
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return EGL_TRUE;
}
-
// EGL 1.2
EGLBoolean EGLAPIENTRY BindAPI(EGLenum api)
{
EVENT("(EGLenum api = 0x%X)", api);
+ Thread *thread = GetCurrentThread();
switch (api)
{
- case EGL_OPENGL_API:
- case EGL_OPENVG_API:
- SetGlobalError(Error(EGL_BAD_PARAMETER));
- return EGL_FALSE; // Not supported by this implementation
- case EGL_OPENGL_ES_API:
- break;
- default:
- SetGlobalError(Error(EGL_BAD_PARAMETER));
- return EGL_FALSE;
+ case EGL_OPENGL_API:
+ case EGL_OPENVG_API:
+ thread->setError(EglBadParameter());
+ return EGL_FALSE; // Not supported by this implementation
+ case EGL_OPENGL_ES_API:
+ break;
+ default:
+ thread->setError(EglBadParameter());
+ return EGL_FALSE;
}
- SetGlobalAPI(api);
+ thread->setAPI(api);
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return EGL_TRUE;
}
EGLenum EGLAPIENTRY QueryAPI(void)
{
EVENT("()");
+ Thread *thread = GetCurrentThread();
- EGLenum API = GetGlobalAPI();
+ EGLenum API = thread->getAPI();
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return API;
}
-EGLSurface EGLAPIENTRY CreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list)
+EGLSurface EGLAPIENTRY CreatePbufferFromClientBuffer(EGLDisplay dpy,
+ EGLenum buftype,
+ EGLClientBuffer buffer,
+ EGLConfig config,
+ const EGLint *attrib_list)
{
- EVENT("(EGLDisplay dpy = 0x%0.8p, EGLenum buftype = 0x%X, EGLClientBuffer buffer = 0x%0.8p, "
- "EGLConfig config = 0x%0.8p, const EGLint *attrib_list = 0x%0.8p)",
- dpy, buftype, buffer, config, attrib_list);
-
- Display *display = static_cast<Display*>(dpy);
- Config *configuration = static_cast<Config*>(config);
- AttributeMap attributes(attrib_list);
-
- Error error = ValidateCreatePbufferFromClientBuffer(display, buftype, buffer, configuration, attributes);
+ EVENT(
+ "(EGLDisplay dpy = 0x%0.8p, EGLenum buftype = 0x%X, EGLClientBuffer buffer = 0x%0.8p, "
+ "EGLConfig config = 0x%0.8p, const EGLint *attrib_list = 0x%0.8p)",
+ dpy, buftype, buffer, config, attrib_list);
+ Thread *thread = GetCurrentThread();
+
+ Display *display = static_cast<Display *>(dpy);
+ Config *configuration = static_cast<Config *>(config);
+ AttributeMap attributes = AttributeMap::CreateFromIntArray(attrib_list);
+
+ Error error =
+ ValidateCreatePbufferFromClientBuffer(display, buftype, buffer, configuration, attributes);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_NO_SURFACE;
}
egl::Surface *surface = nullptr;
- error = display->createPbufferFromClientBuffer(configuration, buffer, attributes, &surface);
+ error = display->createPbufferFromClientBuffer(configuration, buftype, buffer, attributes,
+ &surface);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_NO_SURFACE;
}
@@ -1088,34 +965,36 @@ EGLSurface EGLAPIENTRY CreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buf
EGLBoolean EGLAPIENTRY ReleaseThread(void)
{
EVENT("()");
+ Thread *thread = GetCurrentThread();
MakeCurrent(EGL_NO_DISPLAY, EGL_NO_CONTEXT, EGL_NO_SURFACE, EGL_NO_SURFACE);
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return EGL_TRUE;
}
EGLBoolean EGLAPIENTRY WaitClient(void)
{
EVENT("()");
+ Thread *thread = GetCurrentThread();
- Display *display = GetGlobalDisplay();
+ Display *display = thread->getCurrentDisplay();
Error error = ValidateDisplay(display);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_FALSE;
}
- error = display->waitClient();
+ error = display->waitClient(thread->getContext());
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_FALSE;
}
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return EGL_TRUE;
}
@@ -1123,540 +1002,185 @@ EGLBoolean EGLAPIENTRY WaitClient(void)
EGLContext EGLAPIENTRY GetCurrentContext(void)
{
EVENT("()");
+ Thread *thread = GetCurrentThread();
- gl::Context *context = GetGlobalContext();
+ gl::Context *context = thread->getContext();
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return static_cast<EGLContext>(context);
}
// EGL 1.5
EGLSync EGLAPIENTRY CreateSync(EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list)
{
- EVENT("(EGLDisplay dpy = 0x%0.8p, EGLenum type = 0x%X, const EGLint* attrib_list = 0x%0.8p)", dpy, type, attrib_list);
+ EVENT("(EGLDisplay dpy = 0x%0.8p, EGLenum type = 0x%X, const EGLint* attrib_list = 0x%0.8p)",
+ dpy, type, attrib_list);
+ Thread *thread = GetCurrentThread();
UNIMPLEMENTED();
+ thread->setError(EglBadDisplay() << "eglCreateSync unimplemented.");
return EGL_NO_SYNC;
}
EGLBoolean EGLAPIENTRY DestroySync(EGLDisplay dpy, EGLSync sync)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSync sync = 0x%0.8p)", dpy, sync);
+ Thread *thread = GetCurrentThread();
UNIMPLEMENTED();
+ thread->setError(EglBadDisplay() << "eglDestroySync unimplemented.");
return EGL_FALSE;
}
EGLint EGLAPIENTRY ClientWaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout)
{
- EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSync sync = 0x%0.8p, EGLint flags = 0x%X, EGLTime timeout = %d)", dpy, sync, flags, timeout);
+ EVENT(
+ "(EGLDisplay dpy = 0x%0.8p, EGLSync sync = 0x%0.8p, EGLint flags = 0x%X, EGLTime timeout = "
+ "%d)",
+ dpy, sync, flags, timeout);
+ Thread *thread = GetCurrentThread();
UNIMPLEMENTED();
+ thread->setError(EglBadDisplay() << "eglClientWaitSync unimplemented.");
return 0;
}
-EGLBoolean EGLAPIENTRY GetSyncAttrib(EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib *value)
+EGLBoolean EGLAPIENTRY GetSyncAttrib(EGLDisplay dpy,
+ EGLSync sync,
+ EGLint attribute,
+ EGLAttrib *value)
{
- EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSync sync = 0x%0.8p, EGLint attribute = 0x%X, EGLAttrib *value = 0x%0.8p)", dpy, sync, attribute, value);
+ EVENT(
+ "(EGLDisplay dpy = 0x%0.8p, EGLSync sync = 0x%0.8p, EGLint attribute = 0x%X, EGLAttrib "
+ "*value = 0x%0.8p)",
+ dpy, sync, attribute, value);
+ Thread *thread = GetCurrentThread();
UNIMPLEMENTED();
+ thread->setError(EglBadDisplay() << "eglSyncAttrib unimplemented.");
return EGL_FALSE;
}
-EGLImage EGLAPIENTRY CreateImage(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list)
+EGLImage EGLAPIENTRY CreateImage(EGLDisplay dpy,
+ EGLContext ctx,
+ EGLenum target,
+ EGLClientBuffer buffer,
+ const EGLAttrib *attrib_list)
{
- EVENT("(EGLDisplay dpy = 0x%0.8p, EGLContext ctx = 0x%0.8p, EGLenum target = 0x%X, "
- "EGLClientBuffer buffer = 0x%0.8p, const EGLAttrib *attrib_list = 0x%0.8p)",
- dpy, ctx, target, buffer, attrib_list);
+ EVENT(
+ "(EGLDisplay dpy = 0x%0.8p, EGLContext ctx = 0x%0.8p, EGLenum target = 0x%X, "
+ "EGLClientBuffer buffer = 0x%0.8p, const EGLAttrib *attrib_list = 0x%0.8p)",
+ dpy, ctx, target, buffer, attrib_list);
+ Thread *thread = GetCurrentThread();
UNIMPLEMENTED();
+ thread->setError(EglBadDisplay() << "eglCreateImage unimplemented.");
return EGL_NO_IMAGE;
}
EGLBoolean EGLAPIENTRY DestroyImage(EGLDisplay dpy, EGLImage image)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLImage image = 0x%0.8p)", dpy, image);
+ Thread *thread = GetCurrentThread();
UNIMPLEMENTED();
+ thread->setError(EglBadDisplay() << "eglDestroyImage unimplemented.");
return EGL_FALSE;
}
-EGLDisplay EGLAPIENTRY GetPlatformDisplay(EGLenum platform, void *native_display, const EGLAttrib *attrib_list)
+EGLDisplay EGLAPIENTRY GetPlatformDisplay(EGLenum platform,
+ void *native_display,
+ const EGLAttrib *attrib_list)
{
- EVENT("(EGLenum platform = %d, void* native_display = 0x%0.8p, const EGLint* attrib_list = 0x%0.8p)",
- platform, native_display, attrib_list);
+ EVENT(
+ "(EGLenum platform = %d, void* native_display = 0x%0.8p, const EGLint* attrib_list = "
+ "0x%0.8p)",
+ platform, native_display, attrib_list);
+ Thread *thread = GetCurrentThread();
- UNIMPLEMENTED();
- return EGL_NO_DISPLAY;
+ Error err = ValidateGetPlatformDisplay(platform, native_display, attrib_list);
+ thread->setError(err);
+ if (err.isError())
+ {
+ return EGL_NO_DISPLAY;
+ }
+
+ const auto &attribMap = AttributeMap::CreateFromAttribArray(attrib_list);
+ if (platform == EGL_PLATFORM_ANGLE_ANGLE)
+ {
+ return Display::GetDisplayFromNativeDisplay(
+ gl::bitCast<EGLNativeDisplayType>(native_display), attribMap);
+ }
+ else if (platform == EGL_PLATFORM_DEVICE_EXT)
+ {
+ Device *eglDevice = reinterpret_cast<Device *>(native_display);
+ return Display::GetDisplayFromDevice(eglDevice, attribMap);
+ }
+ else
+ {
+ UNREACHABLE();
+ return EGL_NO_DISPLAY;
+ }
}
-EGLSurface EGLAPIENTRY CreatePlatformWindowSurface(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list)
+EGLSurface EGLAPIENTRY CreatePlatformWindowSurface(EGLDisplay dpy,
+ EGLConfig config,
+ void *native_window,
+ const EGLAttrib *attrib_list)
{
- EVENT("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, void* native_window = 0x%0.8p, const EGLint* attrib_list = 0x%0.8p)",
- dpy, config, native_window, attrib_list);
+ EVENT(
+ "(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, void* native_window = 0x%0.8p, "
+ "const EGLint* attrib_list = 0x%0.8p)",
+ dpy, config, native_window, attrib_list);
+ Thread *thread = GetCurrentThread();
UNIMPLEMENTED();
+ thread->setError(EglBadDisplay() << "eglCreatePlatformWindowSurface unimplemented.");
return EGL_NO_SURFACE;
}
-EGLSurface EGLAPIENTRY CreatePlatformPixmapSurface(EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list)
+EGLSurface EGLAPIENTRY CreatePlatformPixmapSurface(EGLDisplay dpy,
+ EGLConfig config,
+ void *native_pixmap,
+ const EGLAttrib *attrib_list)
{
- EVENT("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, void* native_pixmap = 0x%0.8p, const EGLint* attrib_list = 0x%0.8p)",
- dpy, config, native_pixmap, attrib_list);
+ EVENT(
+ "(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, void* native_pixmap = 0x%0.8p, "
+ "const EGLint* attrib_list = 0x%0.8p)",
+ dpy, config, native_pixmap, attrib_list);
+ Thread *thread = GetCurrentThread();
UNIMPLEMENTED();
+ thread->setError(EglBadDisplay() << "eglCreatePlatformPixmapSurface unimplemented.");
return EGL_NO_SURFACE;
}
EGLBoolean EGLAPIENTRY WaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags)
{
- EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSync sync = 0x%0.8p, EGLint flags = 0x%X)", dpy, sync, flags);
+ EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSync sync = 0x%0.8p, EGLint flags = 0x%X)", dpy, sync,
+ flags);
+ Thread *thread = GetCurrentThread();
UNIMPLEMENTED();
+ thread->setError(EglBadDisplay() << "eglWaitSync unimplemented.");
return EGL_FALSE;
}
__eglMustCastToProperFunctionPointerType EGLAPIENTRY GetProcAddress(const char *procname)
{
EVENT("(const char *procname = \"%s\")", procname);
+ Thread *thread = GetCurrentThread();
- typedef std::map<std::string, __eglMustCastToProperFunctionPointerType> ProcAddressMap;
- auto generateProcAddressMap = []()
- {
- ProcAddressMap map;
-#define INSERT_PROC_ADDRESS(ns, proc) \
- map[#ns #proc] = reinterpret_cast<__eglMustCastToProperFunctionPointerType>(ns::proc)
-
- // GLES2 core
- INSERT_PROC_ADDRESS(gl, ActiveTexture);
- INSERT_PROC_ADDRESS(gl, AttachShader);
- INSERT_PROC_ADDRESS(gl, BindAttribLocation);
- INSERT_PROC_ADDRESS(gl, BindBuffer);
- INSERT_PROC_ADDRESS(gl, BindFramebuffer);
- INSERT_PROC_ADDRESS(gl, BindRenderbuffer);
- INSERT_PROC_ADDRESS(gl, BindTexture);
- INSERT_PROC_ADDRESS(gl, BlendColor);
- INSERT_PROC_ADDRESS(gl, BlendEquation);
- INSERT_PROC_ADDRESS(gl, BlendEquationSeparate);
- INSERT_PROC_ADDRESS(gl, BlendFunc);
- INSERT_PROC_ADDRESS(gl, BlendFuncSeparate);
- INSERT_PROC_ADDRESS(gl, BufferData);
- INSERT_PROC_ADDRESS(gl, BufferSubData);
- INSERT_PROC_ADDRESS(gl, CheckFramebufferStatus);
- INSERT_PROC_ADDRESS(gl, Clear);
- INSERT_PROC_ADDRESS(gl, ClearColor);
- INSERT_PROC_ADDRESS(gl, ClearDepthf);
- INSERT_PROC_ADDRESS(gl, ClearStencil);
- INSERT_PROC_ADDRESS(gl, ColorMask);
- INSERT_PROC_ADDRESS(gl, CompileShader);
- INSERT_PROC_ADDRESS(gl, CompressedTexImage2D);
- INSERT_PROC_ADDRESS(gl, CompressedTexSubImage2D);
- INSERT_PROC_ADDRESS(gl, CopyTexImage2D);
- INSERT_PROC_ADDRESS(gl, CopyTexSubImage2D);
- INSERT_PROC_ADDRESS(gl, CreateProgram);
- INSERT_PROC_ADDRESS(gl, CreateShader);
- INSERT_PROC_ADDRESS(gl, CullFace);
- INSERT_PROC_ADDRESS(gl, DeleteBuffers);
- INSERT_PROC_ADDRESS(gl, DeleteFramebuffers);
- INSERT_PROC_ADDRESS(gl, DeleteProgram);
- INSERT_PROC_ADDRESS(gl, DeleteRenderbuffers);
- INSERT_PROC_ADDRESS(gl, DeleteShader);
- INSERT_PROC_ADDRESS(gl, DeleteTextures);
- INSERT_PROC_ADDRESS(gl, DepthFunc);
- INSERT_PROC_ADDRESS(gl, DepthMask);
- INSERT_PROC_ADDRESS(gl, DepthRangef);
- INSERT_PROC_ADDRESS(gl, DetachShader);
- INSERT_PROC_ADDRESS(gl, Disable);
- INSERT_PROC_ADDRESS(gl, DisableVertexAttribArray);
- INSERT_PROC_ADDRESS(gl, DrawArrays);
- INSERT_PROC_ADDRESS(gl, DrawElements);
- INSERT_PROC_ADDRESS(gl, Enable);
- INSERT_PROC_ADDRESS(gl, EnableVertexAttribArray);
- INSERT_PROC_ADDRESS(gl, Finish);
- INSERT_PROC_ADDRESS(gl, Flush);
- INSERT_PROC_ADDRESS(gl, FramebufferRenderbuffer);
- INSERT_PROC_ADDRESS(gl, FramebufferTexture2D);
- INSERT_PROC_ADDRESS(gl, FrontFace);
- INSERT_PROC_ADDRESS(gl, GenBuffers);
- INSERT_PROC_ADDRESS(gl, GenerateMipmap);
- INSERT_PROC_ADDRESS(gl, GenFramebuffers);
- INSERT_PROC_ADDRESS(gl, GenRenderbuffers);
- INSERT_PROC_ADDRESS(gl, GenTextures);
- INSERT_PROC_ADDRESS(gl, GetActiveAttrib);
- INSERT_PROC_ADDRESS(gl, GetActiveUniform);
- INSERT_PROC_ADDRESS(gl, GetAttachedShaders);
- INSERT_PROC_ADDRESS(gl, GetAttribLocation);
- INSERT_PROC_ADDRESS(gl, GetBooleanv);
- INSERT_PROC_ADDRESS(gl, GetBufferParameteriv);
- INSERT_PROC_ADDRESS(gl, GetError);
- INSERT_PROC_ADDRESS(gl, GetFloatv);
- INSERT_PROC_ADDRESS(gl, GetFramebufferAttachmentParameteriv);
- INSERT_PROC_ADDRESS(gl, GetIntegerv);
- INSERT_PROC_ADDRESS(gl, GetProgramiv);
- INSERT_PROC_ADDRESS(gl, GetProgramInfoLog);
- INSERT_PROC_ADDRESS(gl, GetRenderbufferParameteriv);
- INSERT_PROC_ADDRESS(gl, GetShaderiv);
- INSERT_PROC_ADDRESS(gl, GetShaderInfoLog);
- INSERT_PROC_ADDRESS(gl, GetShaderPrecisionFormat);
- INSERT_PROC_ADDRESS(gl, GetShaderSource);
- INSERT_PROC_ADDRESS(gl, GetString);
- INSERT_PROC_ADDRESS(gl, GetTexParameterfv);
- INSERT_PROC_ADDRESS(gl, GetTexParameteriv);
- INSERT_PROC_ADDRESS(gl, GetUniformfv);
- INSERT_PROC_ADDRESS(gl, GetUniformiv);
- INSERT_PROC_ADDRESS(gl, GetUniformLocation);
- INSERT_PROC_ADDRESS(gl, GetVertexAttribfv);
- INSERT_PROC_ADDRESS(gl, GetVertexAttribiv);
- INSERT_PROC_ADDRESS(gl, GetVertexAttribPointerv);
- INSERT_PROC_ADDRESS(gl, Hint);
- INSERT_PROC_ADDRESS(gl, IsBuffer);
- INSERT_PROC_ADDRESS(gl, IsEnabled);
- INSERT_PROC_ADDRESS(gl, IsFramebuffer);
- INSERT_PROC_ADDRESS(gl, IsProgram);
- INSERT_PROC_ADDRESS(gl, IsRenderbuffer);
- INSERT_PROC_ADDRESS(gl, IsShader);
- INSERT_PROC_ADDRESS(gl, IsTexture);
- INSERT_PROC_ADDRESS(gl, LineWidth);
- INSERT_PROC_ADDRESS(gl, LinkProgram);
- INSERT_PROC_ADDRESS(gl, PixelStorei);
- INSERT_PROC_ADDRESS(gl, PolygonOffset);
- INSERT_PROC_ADDRESS(gl, ReadPixels);
- INSERT_PROC_ADDRESS(gl, ReleaseShaderCompiler);
- INSERT_PROC_ADDRESS(gl, RenderbufferStorage);
- INSERT_PROC_ADDRESS(gl, SampleCoverage);
- INSERT_PROC_ADDRESS(gl, Scissor);
- INSERT_PROC_ADDRESS(gl, ShaderBinary);
- INSERT_PROC_ADDRESS(gl, ShaderSource);
- INSERT_PROC_ADDRESS(gl, StencilFunc);
- INSERT_PROC_ADDRESS(gl, StencilFuncSeparate);
- INSERT_PROC_ADDRESS(gl, StencilMask);
- INSERT_PROC_ADDRESS(gl, StencilMaskSeparate);
- INSERT_PROC_ADDRESS(gl, StencilOp);
- INSERT_PROC_ADDRESS(gl, StencilOpSeparate);
- INSERT_PROC_ADDRESS(gl, TexImage2D);
- INSERT_PROC_ADDRESS(gl, TexParameterf);
- INSERT_PROC_ADDRESS(gl, TexParameterfv);
- INSERT_PROC_ADDRESS(gl, TexParameteri);
- INSERT_PROC_ADDRESS(gl, TexParameteriv);
- INSERT_PROC_ADDRESS(gl, TexSubImage2D);
- INSERT_PROC_ADDRESS(gl, Uniform1f);
- INSERT_PROC_ADDRESS(gl, Uniform1fv);
- INSERT_PROC_ADDRESS(gl, Uniform1i);
- INSERT_PROC_ADDRESS(gl, Uniform1iv);
- INSERT_PROC_ADDRESS(gl, Uniform2f);
- INSERT_PROC_ADDRESS(gl, Uniform2fv);
- INSERT_PROC_ADDRESS(gl, Uniform2i);
- INSERT_PROC_ADDRESS(gl, Uniform2iv);
- INSERT_PROC_ADDRESS(gl, Uniform3f);
- INSERT_PROC_ADDRESS(gl, Uniform3fv);
- INSERT_PROC_ADDRESS(gl, Uniform3i);
- INSERT_PROC_ADDRESS(gl, Uniform3iv);
- INSERT_PROC_ADDRESS(gl, Uniform4f);
- INSERT_PROC_ADDRESS(gl, Uniform4fv);
- INSERT_PROC_ADDRESS(gl, Uniform4i);
- INSERT_PROC_ADDRESS(gl, Uniform4iv);
- INSERT_PROC_ADDRESS(gl, UniformMatrix2fv);
- INSERT_PROC_ADDRESS(gl, UniformMatrix3fv);
- INSERT_PROC_ADDRESS(gl, UniformMatrix4fv);
- INSERT_PROC_ADDRESS(gl, UseProgram);
- INSERT_PROC_ADDRESS(gl, ValidateProgram);
- INSERT_PROC_ADDRESS(gl, VertexAttrib1f);
- INSERT_PROC_ADDRESS(gl, VertexAttrib1fv);
- INSERT_PROC_ADDRESS(gl, VertexAttrib2f);
- INSERT_PROC_ADDRESS(gl, VertexAttrib2fv);
- INSERT_PROC_ADDRESS(gl, VertexAttrib3f);
- INSERT_PROC_ADDRESS(gl, VertexAttrib3fv);
- INSERT_PROC_ADDRESS(gl, VertexAttrib4f);
- INSERT_PROC_ADDRESS(gl, VertexAttrib4fv);
- INSERT_PROC_ADDRESS(gl, VertexAttribPointer);
- INSERT_PROC_ADDRESS(gl, Viewport);
-
- // GL_ANGLE_framebuffer_blit
- INSERT_PROC_ADDRESS(gl, BlitFramebufferANGLE);
-
- // GL_ANGLE_framebuffer_multisample
- INSERT_PROC_ADDRESS(gl, RenderbufferStorageMultisampleANGLE);
-
- // GL_EXT_discard_framebuffer
- INSERT_PROC_ADDRESS(gl, DiscardFramebufferEXT);
-
- // GL_NV_fence
- INSERT_PROC_ADDRESS(gl, DeleteFencesNV);
- INSERT_PROC_ADDRESS(gl, GenFencesNV);
- INSERT_PROC_ADDRESS(gl, IsFenceNV);
- INSERT_PROC_ADDRESS(gl, TestFenceNV);
- INSERT_PROC_ADDRESS(gl, GetFenceivNV);
- INSERT_PROC_ADDRESS(gl, FinishFenceNV);
- INSERT_PROC_ADDRESS(gl, SetFenceNV);
-
- // GL_ANGLE_translated_shader_source
- INSERT_PROC_ADDRESS(gl, GetTranslatedShaderSourceANGLE);
-
- // GL_EXT_texture_storage
- INSERT_PROC_ADDRESS(gl, TexStorage2DEXT);
-
- // GL_EXT_robustness
- INSERT_PROC_ADDRESS(gl, GetGraphicsResetStatusEXT);
- INSERT_PROC_ADDRESS(gl, ReadnPixelsEXT);
- INSERT_PROC_ADDRESS(gl, GetnUniformfvEXT);
- INSERT_PROC_ADDRESS(gl, GetnUniformivEXT);
-
- // GL_EXT_occlusion_query_boolean
- INSERT_PROC_ADDRESS(gl, GenQueriesEXT);
- INSERT_PROC_ADDRESS(gl, DeleteQueriesEXT);
- INSERT_PROC_ADDRESS(gl, IsQueryEXT);
- INSERT_PROC_ADDRESS(gl, BeginQueryEXT);
- INSERT_PROC_ADDRESS(gl, EndQueryEXT);
- INSERT_PROC_ADDRESS(gl, GetQueryivEXT);
- INSERT_PROC_ADDRESS(gl, GetQueryObjectuivEXT);
-
- // GL_EXT_draw_buffers
- INSERT_PROC_ADDRESS(gl, DrawBuffersEXT);
-
- // GL_ANGLE_instanced_arrays
- INSERT_PROC_ADDRESS(gl, DrawArraysInstancedANGLE);
- INSERT_PROC_ADDRESS(gl, DrawElementsInstancedANGLE);
- INSERT_PROC_ADDRESS(gl, VertexAttribDivisorANGLE);
-
- // GL_OES_get_program_binary
- INSERT_PROC_ADDRESS(gl, GetProgramBinaryOES);
- INSERT_PROC_ADDRESS(gl, ProgramBinaryOES);
-
- // GL_OES_mapbuffer
- INSERT_PROC_ADDRESS(gl, MapBufferOES);
- INSERT_PROC_ADDRESS(gl, UnmapBufferOES);
- INSERT_PROC_ADDRESS(gl, GetBufferPointervOES);
-
- // GL_EXT_map_buffer_range
- INSERT_PROC_ADDRESS(gl, MapBufferRangeEXT);
- INSERT_PROC_ADDRESS(gl, FlushMappedBufferRangeEXT);
-
- // GL_EXT_debug_marker
- INSERT_PROC_ADDRESS(gl, InsertEventMarkerEXT);
- INSERT_PROC_ADDRESS(gl, PushGroupMarkerEXT);
- INSERT_PROC_ADDRESS(gl, PopGroupMarkerEXT);
-
- // GL_OES_EGL_image
- INSERT_PROC_ADDRESS(gl, EGLImageTargetTexture2DOES);
- INSERT_PROC_ADDRESS(gl, EGLImageTargetRenderbufferStorageOES);
-
- // GL_OES_vertex_array_object
- INSERT_PROC_ADDRESS(gl, BindVertexArrayOES);
- INSERT_PROC_ADDRESS(gl, DeleteVertexArraysOES);
- INSERT_PROC_ADDRESS(gl, GenVertexArraysOES);
- INSERT_PROC_ADDRESS(gl, IsVertexArrayOES);
-
- // GL_KHR_debug
- INSERT_PROC_ADDRESS(gl, DebugMessageControlKHR);
- INSERT_PROC_ADDRESS(gl, DebugMessageInsertKHR);
- INSERT_PROC_ADDRESS(gl, DebugMessageCallbackKHR);
- INSERT_PROC_ADDRESS(gl, GetDebugMessageLogKHR);
- INSERT_PROC_ADDRESS(gl, PushDebugGroupKHR);
- INSERT_PROC_ADDRESS(gl, PopDebugGroupKHR);
- INSERT_PROC_ADDRESS(gl, ObjectLabelKHR);
- INSERT_PROC_ADDRESS(gl, GetObjectLabelKHR);
- INSERT_PROC_ADDRESS(gl, ObjectPtrLabelKHR);
- INSERT_PROC_ADDRESS(gl, GetObjectPtrLabelKHR);
- INSERT_PROC_ADDRESS(gl, GetPointervKHR);
-
- // GLES3 core
- INSERT_PROC_ADDRESS(gl, ReadBuffer);
- INSERT_PROC_ADDRESS(gl, DrawRangeElements);
- INSERT_PROC_ADDRESS(gl, TexImage3D);
- INSERT_PROC_ADDRESS(gl, TexSubImage3D);
- INSERT_PROC_ADDRESS(gl, CopyTexSubImage3D);
- INSERT_PROC_ADDRESS(gl, CompressedTexImage3D);
- INSERT_PROC_ADDRESS(gl, CompressedTexSubImage3D);
- INSERT_PROC_ADDRESS(gl, GenQueries);
- INSERT_PROC_ADDRESS(gl, DeleteQueries);
- INSERT_PROC_ADDRESS(gl, IsQuery);
- INSERT_PROC_ADDRESS(gl, BeginQuery);
- INSERT_PROC_ADDRESS(gl, EndQuery);
- INSERT_PROC_ADDRESS(gl, GetQueryiv);
- INSERT_PROC_ADDRESS(gl, GetQueryObjectuiv);
- INSERT_PROC_ADDRESS(gl, UnmapBuffer);
- INSERT_PROC_ADDRESS(gl, GetBufferPointerv);
- INSERT_PROC_ADDRESS(gl, DrawBuffers);
- INSERT_PROC_ADDRESS(gl, UniformMatrix2x3fv);
- INSERT_PROC_ADDRESS(gl, UniformMatrix3x2fv);
- INSERT_PROC_ADDRESS(gl, UniformMatrix2x4fv);
- INSERT_PROC_ADDRESS(gl, UniformMatrix4x2fv);
- INSERT_PROC_ADDRESS(gl, UniformMatrix3x4fv);
- INSERT_PROC_ADDRESS(gl, UniformMatrix4x3fv);
- INSERT_PROC_ADDRESS(gl, BlitFramebuffer);
- INSERT_PROC_ADDRESS(gl, RenderbufferStorageMultisample);
- INSERT_PROC_ADDRESS(gl, FramebufferTextureLayer);
- INSERT_PROC_ADDRESS(gl, MapBufferRange);
- INSERT_PROC_ADDRESS(gl, FlushMappedBufferRange);
- INSERT_PROC_ADDRESS(gl, BindVertexArray);
- INSERT_PROC_ADDRESS(gl, DeleteVertexArrays);
- INSERT_PROC_ADDRESS(gl, GenVertexArrays);
- INSERT_PROC_ADDRESS(gl, IsVertexArray);
- INSERT_PROC_ADDRESS(gl, GetIntegeri_v);
- INSERT_PROC_ADDRESS(gl, BeginTransformFeedback);
- INSERT_PROC_ADDRESS(gl, EndTransformFeedback);
- INSERT_PROC_ADDRESS(gl, BindBufferRange);
- INSERT_PROC_ADDRESS(gl, BindBufferBase);
- INSERT_PROC_ADDRESS(gl, TransformFeedbackVaryings);
- INSERT_PROC_ADDRESS(gl, GetTransformFeedbackVarying);
- INSERT_PROC_ADDRESS(gl, VertexAttribIPointer);
- INSERT_PROC_ADDRESS(gl, GetVertexAttribIiv);
- INSERT_PROC_ADDRESS(gl, GetVertexAttribIuiv);
- INSERT_PROC_ADDRESS(gl, VertexAttribI4i);
- INSERT_PROC_ADDRESS(gl, VertexAttribI4ui);
- INSERT_PROC_ADDRESS(gl, VertexAttribI4iv);
- INSERT_PROC_ADDRESS(gl, VertexAttribI4uiv);
- INSERT_PROC_ADDRESS(gl, GetUniformuiv);
- INSERT_PROC_ADDRESS(gl, GetFragDataLocation);
- INSERT_PROC_ADDRESS(gl, Uniform1ui);
- INSERT_PROC_ADDRESS(gl, Uniform2ui);
- INSERT_PROC_ADDRESS(gl, Uniform3ui);
- INSERT_PROC_ADDRESS(gl, Uniform4ui);
- INSERT_PROC_ADDRESS(gl, Uniform1uiv);
- INSERT_PROC_ADDRESS(gl, Uniform2uiv);
- INSERT_PROC_ADDRESS(gl, Uniform3uiv);
- INSERT_PROC_ADDRESS(gl, Uniform4uiv);
- INSERT_PROC_ADDRESS(gl, ClearBufferiv);
- INSERT_PROC_ADDRESS(gl, ClearBufferuiv);
- INSERT_PROC_ADDRESS(gl, ClearBufferfv);
- INSERT_PROC_ADDRESS(gl, ClearBufferfi);
- INSERT_PROC_ADDRESS(gl, GetStringi);
- INSERT_PROC_ADDRESS(gl, CopyBufferSubData);
- INSERT_PROC_ADDRESS(gl, GetUniformIndices);
- INSERT_PROC_ADDRESS(gl, GetActiveUniformsiv);
- INSERT_PROC_ADDRESS(gl, GetUniformBlockIndex);
- INSERT_PROC_ADDRESS(gl, GetActiveUniformBlockiv);
- INSERT_PROC_ADDRESS(gl, GetActiveUniformBlockName);
- INSERT_PROC_ADDRESS(gl, UniformBlockBinding);
- INSERT_PROC_ADDRESS(gl, DrawArraysInstanced);
- INSERT_PROC_ADDRESS(gl, DrawElementsInstanced);
- map["glFenceSync"] =
- reinterpret_cast<__eglMustCastToProperFunctionPointerType>(gl::FenceSync_);
- INSERT_PROC_ADDRESS(gl, IsSync);
- INSERT_PROC_ADDRESS(gl, DeleteSync);
- INSERT_PROC_ADDRESS(gl, ClientWaitSync);
- INSERT_PROC_ADDRESS(gl, WaitSync);
- INSERT_PROC_ADDRESS(gl, GetInteger64v);
- INSERT_PROC_ADDRESS(gl, GetSynciv);
- INSERT_PROC_ADDRESS(gl, GetInteger64i_v);
- INSERT_PROC_ADDRESS(gl, GetBufferParameteri64v);
- INSERT_PROC_ADDRESS(gl, GenSamplers);
- INSERT_PROC_ADDRESS(gl, DeleteSamplers);
- INSERT_PROC_ADDRESS(gl, IsSampler);
- INSERT_PROC_ADDRESS(gl, BindSampler);
- INSERT_PROC_ADDRESS(gl, SamplerParameteri);
- INSERT_PROC_ADDRESS(gl, SamplerParameteriv);
- INSERT_PROC_ADDRESS(gl, SamplerParameterf);
- INSERT_PROC_ADDRESS(gl, SamplerParameterfv);
- INSERT_PROC_ADDRESS(gl, GetSamplerParameteriv);
- INSERT_PROC_ADDRESS(gl, GetSamplerParameterfv);
- INSERT_PROC_ADDRESS(gl, VertexAttribDivisor);
- INSERT_PROC_ADDRESS(gl, BindTransformFeedback);
- INSERT_PROC_ADDRESS(gl, DeleteTransformFeedbacks);
- INSERT_PROC_ADDRESS(gl, GenTransformFeedbacks);
- INSERT_PROC_ADDRESS(gl, IsTransformFeedback);
- INSERT_PROC_ADDRESS(gl, PauseTransformFeedback);
- INSERT_PROC_ADDRESS(gl, ResumeTransformFeedback);
- INSERT_PROC_ADDRESS(gl, GetProgramBinary);
- INSERT_PROC_ADDRESS(gl, ProgramBinary);
- INSERT_PROC_ADDRESS(gl, ProgramParameteri);
- INSERT_PROC_ADDRESS(gl, InvalidateFramebuffer);
- INSERT_PROC_ADDRESS(gl, InvalidateSubFramebuffer);
- INSERT_PROC_ADDRESS(gl, TexStorage2D);
- INSERT_PROC_ADDRESS(gl, TexStorage3D);
- INSERT_PROC_ADDRESS(gl, GetInternalformativ);
-
- // EGL 1.0
- INSERT_PROC_ADDRESS(egl, ChooseConfig);
- INSERT_PROC_ADDRESS(egl, CopyBuffers);
- INSERT_PROC_ADDRESS(egl, CreateContext);
- INSERT_PROC_ADDRESS(egl, CreatePbufferSurface);
- INSERT_PROC_ADDRESS(egl, CreatePixmapSurface);
- INSERT_PROC_ADDRESS(egl, CreateWindowSurface);
- INSERT_PROC_ADDRESS(egl, DestroyContext);
- INSERT_PROC_ADDRESS(egl, DestroySurface);
- INSERT_PROC_ADDRESS(egl, GetConfigAttrib);
- INSERT_PROC_ADDRESS(egl, GetConfigs);
- INSERT_PROC_ADDRESS(egl, GetCurrentDisplay);
- INSERT_PROC_ADDRESS(egl, GetCurrentSurface);
- INSERT_PROC_ADDRESS(egl, GetDisplay);
- INSERT_PROC_ADDRESS(egl, GetError);
- INSERT_PROC_ADDRESS(egl, GetProcAddress);
- INSERT_PROC_ADDRESS(egl, Initialize);
- INSERT_PROC_ADDRESS(egl, MakeCurrent);
- INSERT_PROC_ADDRESS(egl, QueryContext);
- INSERT_PROC_ADDRESS(egl, QueryString);
- INSERT_PROC_ADDRESS(egl, QuerySurface);
- INSERT_PROC_ADDRESS(egl, SwapBuffers);
- INSERT_PROC_ADDRESS(egl, Terminate);
- INSERT_PROC_ADDRESS(egl, WaitGL);
- INSERT_PROC_ADDRESS(egl, WaitNative);
-
- // EGL 1.1
- INSERT_PROC_ADDRESS(egl, BindTexImage);
- INSERT_PROC_ADDRESS(egl, ReleaseTexImage);
- INSERT_PROC_ADDRESS(egl, SurfaceAttrib);
- INSERT_PROC_ADDRESS(egl, SwapInterval);
-
- // EGL 1.2
- INSERT_PROC_ADDRESS(egl, BindAPI);
- INSERT_PROC_ADDRESS(egl, QueryAPI);
- INSERT_PROC_ADDRESS(egl, CreatePbufferFromClientBuffer);
- INSERT_PROC_ADDRESS(egl, ReleaseThread);
- INSERT_PROC_ADDRESS(egl, WaitClient);
-
- // EGL 1.4
- INSERT_PROC_ADDRESS(egl, GetCurrentContext);
-
- // EGL 1.5
- INSERT_PROC_ADDRESS(egl, CreateSync);
- INSERT_PROC_ADDRESS(egl, DestroySync);
- INSERT_PROC_ADDRESS(egl, ClientWaitSync);
- INSERT_PROC_ADDRESS(egl, GetSyncAttrib);
- INSERT_PROC_ADDRESS(egl, CreateImage);
- INSERT_PROC_ADDRESS(egl, DestroyImage);
- INSERT_PROC_ADDRESS(egl, GetPlatformDisplay);
- INSERT_PROC_ADDRESS(egl, CreatePlatformWindowSurface);
- INSERT_PROC_ADDRESS(egl, CreatePlatformPixmapSurface);
- INSERT_PROC_ADDRESS(egl, WaitSync);
-
- // EGL_ANGLE_query_surface_pointer
- INSERT_PROC_ADDRESS(egl, QuerySurfacePointerANGLE);
-
- // EGL_NV_post_sub_buffer
- INSERT_PROC_ADDRESS(egl, PostSubBufferNV);
-
- // EGL_EXT_platform_base
- INSERT_PROC_ADDRESS(egl, GetPlatformDisplayEXT);
-
- // EGL_EXT_device_query
- INSERT_PROC_ADDRESS(egl, QueryDisplayAttribEXT);
- INSERT_PROC_ADDRESS(egl, QueryDeviceAttribEXT);
- INSERT_PROC_ADDRESS(egl, QueryDeviceStringEXT);
-
- // EGL_KHR_image_base/EGL_KHR_image
- INSERT_PROC_ADDRESS(egl, CreateImageKHR);
- INSERT_PROC_ADDRESS(egl, DestroyImageKHR);
-
- // EGL_EXT_device_creation
- INSERT_PROC_ADDRESS(egl, CreateDeviceANGLE);
- INSERT_PROC_ADDRESS(egl, ReleaseDeviceANGLE);
-
-#undef INSERT_PROC_ADDRESS
- return map;
- };
-
- static const ProcAddressMap procAddressMap = generateProcAddressMap();
-
- auto iter = procAddressMap.find(procname);
- if (iter != procAddressMap.end())
- {
- return iter->second;
- }
- else
+ ProcEntry *entry =
+ std::lower_bound(&g_procTable[0], &g_procTable[g_numProcs], procname, CompareProc);
+
+ thread->setError(NoError());
+
+ if (entry == &g_procTable[g_numProcs] || strcmp(entry->first, procname) != 0)
{
return nullptr;
}
-}
+ return entry->second;
+}
}
diff --git a/src/3rdparty/angle/src/libGLESv2/entry_points_egl_ext.cpp b/src/3rdparty/angle/src/libGLESv2/entry_points_egl_ext.cpp
index 6c7e2ffc3d..ee8cdb94dc 100644
--- a/src/3rdparty/angle/src/libGLESv2/entry_points_egl_ext.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/entry_points_egl_ext.cpp
@@ -9,9 +9,12 @@
#include "libGLESv2/entry_points_egl_ext.h"
#include "libGLESv2/global_state.h"
+#include "libANGLE/Context.h"
#include "libANGLE/Display.h"
#include "libANGLE/Device.h"
#include "libANGLE/Surface.h"
+#include "libANGLE/Stream.h"
+#include "libANGLE/Thread.h"
#include "libANGLE/validationEGL.h"
#include "common/debug.h"
@@ -24,6 +27,7 @@ EGLBoolean EGLAPIENTRY QuerySurfacePointerANGLE(EGLDisplay dpy, EGLSurface surfa
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint attribute = %d, void **value = 0x%0.8p)",
dpy, surface, attribute, value);
+ Thread *thread = GetCurrentThread();
Display *display = static_cast<Display*>(dpy);
Surface *eglSurface = static_cast<Surface*>(surface);
@@ -31,19 +35,19 @@ EGLBoolean EGLAPIENTRY QuerySurfacePointerANGLE(EGLDisplay dpy, EGLSurface surfa
Error error = ValidateSurface(display, eglSurface);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_FALSE;
}
if (!display->getExtensions().querySurfacePointer)
{
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return EGL_FALSE;
}
if (surface == EGL_NO_SURFACE)
{
- SetGlobalError(Error(EGL_BAD_SURFACE));
+ thread->setError(EglBadSurface());
return EGL_FALSE;
}
@@ -55,24 +59,24 @@ EGLBoolean EGLAPIENTRY QuerySurfacePointerANGLE(EGLDisplay dpy, EGLSurface surfa
case EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE:
if (!display->getExtensions().surfaceD3DTexture2DShareHandle)
{
- SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
+ thread->setError(EglBadAttribute());
return EGL_FALSE;
}
break;
case EGL_DXGI_KEYED_MUTEX_ANGLE:
if (!display->getExtensions().keyedMutex)
{
- SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
+ thread->setError(EglBadAttribute());
return EGL_FALSE;
}
break;
default:
- SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
- return EGL_FALSE;
+ thread->setError(EglBadAttribute());
+ return EGL_FALSE;
}
error = eglSurface->querySurfacePointerANGLE(attribute, value);
- SetGlobalError(error);
+ thread->setError(error);
return (error.isError() ? EGL_FALSE : EGL_TRUE);
}
@@ -81,10 +85,11 @@ EGLBoolean EGLAPIENTRY QuerySurfacePointerANGLE(EGLDisplay dpy, EGLSurface surfa
EGLBoolean EGLAPIENTRY PostSubBufferNV(EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint x = %d, EGLint y = %d, EGLint width = %d, EGLint height = %d)", dpy, surface, x, y, width, height);
+ Thread *thread = GetCurrentThread();
if (x < 0 || y < 0 || width < 0 || height < 0)
{
- SetGlobalError(Error(EGL_BAD_PARAMETER));
+ thread->setError(EglBadParameter());
return EGL_FALSE;
}
@@ -94,39 +99,38 @@ EGLBoolean EGLAPIENTRY PostSubBufferNV(EGLDisplay dpy, EGLSurface surface, EGLin
Error error = ValidateSurface(display, eglSurface);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_FALSE;
}
- if (display->isDeviceLost())
+ if (display->testDeviceLost())
{
- SetGlobalError(Error(EGL_CONTEXT_LOST));
+ thread->setError(EglContextLost());
return EGL_FALSE;
}
if (surface == EGL_NO_SURFACE)
{
- SetGlobalError(Error(EGL_BAD_SURFACE));
+ thread->setError(EglBadSurface());
return EGL_FALSE;
}
-#if !defined(ANGLE_ENABLE_WINDOWS_STORE) || (defined(ANGLE_ENABLE_WINDOWS_STORE) && WINAPI_FAMILY == WINAPI_FAMILY_PC_APP) // Qt WP: Allow this entry point as a workaround
if (!display->getExtensions().postSubBuffer)
{
// Spec is not clear about how this should be handled.
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return EGL_TRUE;
}
-#endif
- error = eglSurface->postSubBuffer(x, y, width, height);
+ // TODO(jmadill): Validate Surface is bound to the thread.
+ error = eglSurface->postSubBuffer(thread->getContext(), x, y, width, height);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_FALSE;
}
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return EGL_TRUE;
}
@@ -135,215 +139,25 @@ EGLDisplay EGLAPIENTRY GetPlatformDisplayEXT(EGLenum platform, void *native_disp
{
EVENT("(EGLenum platform = %d, void* native_display = 0x%0.8p, const EGLint* attrib_list = 0x%0.8p)",
platform, native_display, attrib_list);
+ Thread *thread = GetCurrentThread();
- const ClientExtensions &clientExtensions = Display::getClientExtensions();
-
- switch (platform)
+ Error err = ValidateGetPlatformDisplayEXT(platform, native_display, attrib_list);
+ thread->setError(err);
+ if (err.isError())
{
- case EGL_PLATFORM_ANGLE_ANGLE:
- if (!clientExtensions.platformANGLE)
- {
- SetGlobalError(Error(EGL_BAD_PARAMETER));
- return EGL_NO_DISPLAY;
- }
- break;
- case EGL_PLATFORM_DEVICE_EXT:
- if (!clientExtensions.platformDevice)
- {
- SetGlobalError(Error(EGL_BAD_PARAMETER, "Platform Device extension is not active"));
- return EGL_NO_DISPLAY;
- }
- break;
- default:
- SetGlobalError(Error(EGL_BAD_CONFIG));
return EGL_NO_DISPLAY;
}
+ const auto &attribMap = AttributeMap::CreateFromIntArray(attrib_list);
if (platform == EGL_PLATFORM_ANGLE_ANGLE)
{
- EGLint platformType = EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE;
- EGLint deviceType = EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE;
- bool majorVersionSpecified = false;
- bool minorVersionSpecified = false;
- bool enableAutoTrimSpecified = false;
- bool deviceTypeSpecified = false;
- bool presentPathSpecified = false;
-
- if (attrib_list)
- {
- for (const EGLint *curAttrib = attrib_list; curAttrib[0] != EGL_NONE; curAttrib += 2)
- {
- switch (curAttrib[0])
- {
- case EGL_PLATFORM_ANGLE_TYPE_ANGLE:
- switch (curAttrib[1])
- {
- case EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE:
- break;
-
- case EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE:
- case EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE:
- if (!clientExtensions.platformANGLED3D)
- {
- SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
- return EGL_NO_DISPLAY;
- }
- break;
-
- case EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE:
- case EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE:
- if (!clientExtensions.platformANGLEOpenGL)
- {
- SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
- return EGL_NO_DISPLAY;
- }
- break;
-
- default:
- SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
- return EGL_NO_DISPLAY;
- }
- platformType = curAttrib[1];
- break;
-
- case EGL_PLATFORM_ANGLE_MAX_VERSION_MAJOR_ANGLE:
- if (curAttrib[1] != EGL_DONT_CARE)
- {
- majorVersionSpecified = true;
- }
- break;
-
- case EGL_PLATFORM_ANGLE_MAX_VERSION_MINOR_ANGLE:
- if (curAttrib[1] != EGL_DONT_CARE)
- {
- minorVersionSpecified = true;
- }
- break;
-
- case EGL_PLATFORM_ANGLE_ENABLE_AUTOMATIC_TRIM_ANGLE:
- switch (curAttrib[1])
- {
- case EGL_TRUE:
- case EGL_FALSE:
- break;
- default:
- SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
- return EGL_NO_DISPLAY;
- }
- enableAutoTrimSpecified = true;
- break;
-
- case EGL_EXPERIMENTAL_PRESENT_PATH_ANGLE:
- if (!clientExtensions.experimentalPresentPath)
- {
- SetGlobalError(
- Error(EGL_BAD_ATTRIBUTE,
- "EGL_ANGLE_experimental_present_path extension not active"));
- return EGL_NO_DISPLAY;
- }
-
- switch (curAttrib[1])
- {
- case EGL_EXPERIMENTAL_PRESENT_PATH_FAST_ANGLE:
- case EGL_EXPERIMENTAL_PRESENT_PATH_COPY_ANGLE:
- break;
- default:
- SetGlobalError(
- Error(EGL_BAD_ATTRIBUTE,
- "Invalid value for EGL_EXPERIMENTAL_PRESENT_PATH_ANGLE"));
- return EGL_NO_DISPLAY;
- }
- presentPathSpecified = true;
- break;
-
- case EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE:
- switch (curAttrib[1])
- {
- case EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE:
- case EGL_PLATFORM_ANGLE_DEVICE_TYPE_WARP_ANGLE:
- case EGL_PLATFORM_ANGLE_DEVICE_TYPE_REFERENCE_ANGLE:
- deviceTypeSpecified = true;
- break;
-
- case EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE:
- // This is a hidden option, accepted by the OpenGL back-end.
- break;
-
- default:
- SetGlobalError(Error(EGL_BAD_ATTRIBUTE,
- "Invalid value for "
- "EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE "
- "attrib"));
- return EGL_NO_DISPLAY;
- }
- deviceType = curAttrib[1];
- break;
-
- default:
- break;
- }
- }
- }
-
- if (!majorVersionSpecified && minorVersionSpecified)
- {
- SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
- return EGL_NO_DISPLAY;
- }
-
- if (deviceType == EGL_PLATFORM_ANGLE_DEVICE_TYPE_WARP_ANGLE &&
- platformType != EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE)
- {
- SetGlobalError(
- Error(EGL_BAD_ATTRIBUTE,
- "EGL_PLATFORM_ANGLE_DEVICE_TYPE_WARP_ANGLE requires a device type of "
- "EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE."));
- return EGL_NO_DISPLAY;
- }
-
- if (enableAutoTrimSpecified && platformType != EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE)
- {
- SetGlobalError(
- Error(EGL_BAD_ATTRIBUTE,
- "EGL_PLATFORM_ANGLE_ENABLE_AUTOMATIC_TRIM_ANGLE requires a device type of "
- "EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE."));
- return EGL_NO_DISPLAY;
- }
-
- if (presentPathSpecified && platformType != EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE)
- {
- SetGlobalError(Error(EGL_BAD_ATTRIBUTE,
- "EGL_EXPERIMENTAL_PRESENT_PATH_ANGLE requires a device type of "
- "EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE."));
- return EGL_NO_DISPLAY;
- }
-
- if (deviceTypeSpecified && platformType != EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE &&
- platformType != EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE)
- {
- SetGlobalError(
- Error(EGL_BAD_ATTRIBUTE,
- "EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE requires a device type of "
- "EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE or EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE."));
- return EGL_NO_DISPLAY;
- }
-
- SetGlobalError(Error(EGL_SUCCESS));
- return Display::GetDisplayFromAttribs(native_display, AttributeMap(attrib_list));
+ return Display::GetDisplayFromNativeDisplay(
+ gl::bitCast<EGLNativeDisplayType>(native_display), attribMap);
}
else if (platform == EGL_PLATFORM_DEVICE_EXT)
{
Device *eglDevice = reinterpret_cast<Device *>(native_display);
- if (eglDevice == nullptr || !Device::IsValidDevice(eglDevice))
- {
- SetGlobalError(Error(EGL_BAD_ATTRIBUTE,
- "native_display should be a valid EGL device if platform equals "
- "EGL_PLATFORM_DEVICE_EXT"));
- return EGL_NO_DISPLAY;
- }
-
- SetGlobalError(Error(EGL_SUCCESS));
- return Display::GetDisplayFromDevice(native_display);
+ return Display::GetDisplayFromDevice(eglDevice, attribMap);
}
else
{
@@ -357,11 +171,12 @@ EGLBoolean EGLAPIENTRY QueryDeviceAttribEXT(EGLDeviceEXT device, EGLint attribut
{
EVENT("(EGLDeviceEXT device = 0x%0.8p, EGLint attribute = %d, EGLAttrib *value = 0x%0.8p)",
device, attribute, value);
+ Thread *thread = GetCurrentThread();
Device *dev = static_cast<Device*>(device);
if (dev == EGL_NO_DEVICE_EXT || !Device::IsValidDevice(dev))
{
- SetGlobalError(Error(EGL_BAD_ACCESS));
+ thread->setError(EglBadAccess());
return EGL_FALSE;
}
@@ -370,13 +185,13 @@ EGLBoolean EGLAPIENTRY QueryDeviceAttribEXT(EGLDeviceEXT device, EGLint attribut
Display *owningDisplay = dev->getOwningDisplay();
if (owningDisplay != nullptr && !owningDisplay->getExtensions().deviceQuery)
{
- SetGlobalError(Error(EGL_BAD_ACCESS,
- "Device wasn't created using eglCreateDeviceANGLE, and the Display "
- "that created it doesn't support device querying"));
+ thread->setError(EglBadAccess() << "Device wasn't created using eglCreateDeviceANGLE, "
+ "and the Display that created it doesn't support "
+ "device querying");
return EGL_FALSE;
}
- Error error(EGL_SUCCESS);
+ Error error(NoError());
// validate the attribute parameter
switch (attribute)
@@ -385,17 +200,17 @@ EGLBoolean EGLAPIENTRY QueryDeviceAttribEXT(EGLDeviceEXT device, EGLint attribut
case EGL_D3D9_DEVICE_ANGLE:
if (!dev->getExtensions().deviceD3D || dev->getType() != attribute)
{
- SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
+ thread->setError(EglBadAttribute());
return EGL_FALSE;
}
error = dev->getDevice(value);
break;
default:
- SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
- return EGL_FALSE;
+ thread->setError(EglBadAttribute());
+ return EGL_FALSE;
}
- SetGlobalError(error);
+ thread->setError(error);
return (error.isError() ? EGL_FALSE : EGL_TRUE);
}
@@ -404,11 +219,12 @@ const char * EGLAPIENTRY QueryDeviceStringEXT(EGLDeviceEXT device, EGLint name)
{
EVENT("(EGLDeviceEXT device = 0x%0.8p, EGLint name = %d)",
device, name);
+ Thread *thread = GetCurrentThread();
Device *dev = static_cast<Device*>(device);
if (dev == EGL_NO_DEVICE_EXT || !Device::IsValidDevice(dev))
{
- SetGlobalError(Error(EGL_BAD_DEVICE_EXT));
+ thread->setError(EglBadDevice());
return nullptr;
}
@@ -419,11 +235,11 @@ const char * EGLAPIENTRY QueryDeviceStringEXT(EGLDeviceEXT device, EGLint name)
result = dev->getExtensionString().c_str();
break;
default:
- SetGlobalError(Error(EGL_BAD_DEVICE_EXT));
- return nullptr;
+ thread->setError(EglBadDevice());
+ return nullptr;
}
- SetGlobalError(Error(EGL_SUCCESS));
+ thread->setError(NoError());
return result;
}
@@ -432,13 +248,20 @@ EGLBoolean EGLAPIENTRY QueryDisplayAttribEXT(EGLDisplay dpy, EGLint attribute, E
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLint attribute = %d, EGLAttrib *value = 0x%0.8p)",
dpy, attribute, value);
+ Thread *thread = GetCurrentThread();
Display *display = static_cast<Display*>(dpy);
- Error error(EGL_SUCCESS);
+
+ Error error = ValidateDisplay(display);
+ if (error.isError())
+ {
+ thread->setError(error);
+ return EGL_FALSE;
+ }
if (!display->getExtensions().deviceQuery)
{
- SetGlobalError(Error(EGL_BAD_ACCESS));
+ thread->setError(EglBadAccess());
return EGL_FALSE;
}
@@ -450,11 +273,11 @@ EGLBoolean EGLAPIENTRY QueryDisplayAttribEXT(EGLDisplay dpy, EGLint attribute, E
break;
default:
- SetGlobalError(Error(EGL_BAD_ATTRIBUTE));
- return EGL_FALSE;
+ thread->setError(EglBadAttribute());
+ return EGL_FALSE;
}
- SetGlobalError(error);
+ thread->setError(error);
return (error.isError() ? EGL_FALSE : EGL_TRUE);
}
@@ -468,23 +291,24 @@ ANGLE_EXPORT EGLImageKHR EGLAPIENTRY CreateImageKHR(EGLDisplay dpy,
"(EGLDisplay dpy = 0x%0.8p, EGLContext ctx = 0x%0.8p, EGLenum target = 0x%X, "
"EGLClientBuffer buffer = 0x%0.8p, const EGLAttrib *attrib_list = 0x%0.8p)",
dpy, ctx, target, buffer, attrib_list);
+ Thread *thread = GetCurrentThread();
Display *display = static_cast<Display *>(dpy);
gl::Context *context = static_cast<gl::Context *>(ctx);
- AttributeMap attributes(attrib_list);
+ AttributeMap attributes = AttributeMap::CreateFromIntArray(attrib_list);
Error error = ValidateCreateImageKHR(display, context, target, buffer, attributes);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_NO_IMAGE;
}
Image *image = nullptr;
- error = display->createImage(context, target, buffer, attributes, &image);
+ error = display->createImage(context, target, buffer, attributes, &image);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_NO_IMAGE;
}
@@ -494,6 +318,7 @@ ANGLE_EXPORT EGLImageKHR EGLAPIENTRY CreateImageKHR(EGLDisplay dpy,
ANGLE_EXPORT EGLBoolean EGLAPIENTRY DestroyImageKHR(EGLDisplay dpy, EGLImageKHR image)
{
EVENT("(EGLDisplay dpy = 0x%0.8p, EGLImage image = 0x%0.8p)", dpy, image);
+ Thread *thread = GetCurrentThread();
Display *display = static_cast<Display *>(dpy);
Image *img = static_cast<Image *>(image);
@@ -501,7 +326,7 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY DestroyImageKHR(EGLDisplay dpy, EGLImageKHR
Error error = ValidateDestroyImageKHR(display, img);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_FALSE;
}
@@ -518,11 +343,12 @@ ANGLE_EXPORT EGLDeviceEXT EGLAPIENTRY CreateDeviceANGLE(EGLint device_type,
"(EGLint device_type = %d, void* native_device = 0x%0.8p, const EGLAttrib* attrib_list = "
"0x%0.8p)",
device_type, native_device, attrib_list);
+ Thread *thread = GetCurrentThread();
Error error = ValidateCreateDeviceANGLE(device_type, native_device, attrib_list);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_NO_DEVICE_EXT;
}
@@ -531,7 +357,7 @@ ANGLE_EXPORT EGLDeviceEXT EGLAPIENTRY CreateDeviceANGLE(EGLint device_type,
if (error.isError())
{
ASSERT(device == nullptr);
- SetGlobalError(error);
+ thread->setError(error);
return EGL_NO_DEVICE_EXT;
}
@@ -541,13 +367,14 @@ ANGLE_EXPORT EGLDeviceEXT EGLAPIENTRY CreateDeviceANGLE(EGLint device_type,
ANGLE_EXPORT EGLBoolean EGLAPIENTRY ReleaseDeviceANGLE(EGLDeviceEXT device)
{
EVENT("(EGLDeviceEXT device = 0x%0.8p)", device);
+ Thread *thread = GetCurrentThread();
Device *dev = static_cast<Device *>(device);
Error error = ValidateReleaseDeviceANGLE(dev);
if (error.isError())
{
- SetGlobalError(error);
+ thread->setError(error);
return EGL_FALSE;
}
@@ -555,4 +382,475 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY ReleaseDeviceANGLE(EGLDeviceEXT device)
return EGL_TRUE;
}
+
+// EGL_KHR_stream
+EGLStreamKHR EGLAPIENTRY CreateStreamKHR(EGLDisplay dpy, const EGLint *attrib_list)
+{
+ EVENT("(EGLDisplay dpy = 0x%0.8p, const EGLAttrib* attrib_list = 0x%0.8p)", dpy, attrib_list);
+ Thread *thread = GetCurrentThread();
+
+ Display *display = static_cast<Display *>(dpy);
+ AttributeMap attributes = AttributeMap::CreateFromIntArray(attrib_list);
+
+ Error error = ValidateCreateStreamKHR(display, attributes);
+ if (error.isError())
+ {
+ thread->setError(error);
+ return EGL_NO_STREAM_KHR;
+ }
+
+ Stream *stream;
+ error = display->createStream(attributes, &stream);
+ if (error.isError())
+ {
+ thread->setError(error);
+ return EGL_NO_STREAM_KHR;
+ }
+
+ thread->setError(error);
+ return static_cast<EGLStreamKHR>(stream);
+}
+
+EGLBoolean EGLAPIENTRY DestroyStreamKHR(EGLDisplay dpy, EGLStreamKHR stream)
+{
+ EVENT("(EGLDisplay dpy = 0x%0.8p, EGLStreamKHR = 0x%0.8p)", dpy, stream);
+ Thread *thread = GetCurrentThread();
+
+ Display *display = static_cast<Display *>(dpy);
+ Stream *streamObject = static_cast<Stream *>(stream);
+
+ Error error = ValidateDestroyStreamKHR(display, streamObject);
+ if (error.isError())
+ {
+ thread->setError(error);
+ return EGL_FALSE;
+ }
+
+ display->destroyStream(streamObject);
+ thread->setError(error);
+ return EGL_TRUE;
+}
+
+EGLBoolean EGLAPIENTRY StreamAttribKHR(EGLDisplay dpy,
+ EGLStreamKHR stream,
+ EGLenum attribute,
+ EGLint value)
+{
+ EVENT(
+ "(EGLDisplay dpy = 0x%0.8p, EGLStreamKHR stream = 0x%0.8p, EGLenum attribute = 0x%X, "
+ "EGLint value = 0x%X)",
+ dpy, stream, attribute, value);
+ Thread *thread = GetCurrentThread();
+
+ Display *display = static_cast<Display *>(dpy);
+ Stream *streamObject = static_cast<Stream *>(stream);
+
+ Error error = ValidateStreamAttribKHR(display, streamObject, attribute, value);
+ if (error.isError())
+ {
+ thread->setError(error);
+ return EGL_FALSE;
+ }
+
+ switch (attribute)
+ {
+ case EGL_CONSUMER_LATENCY_USEC_KHR:
+ streamObject->setConsumerLatency(value);
+ break;
+ case EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR:
+ streamObject->setConsumerAcquireTimeout(value);
+ break;
+ default:
+ UNREACHABLE();
+ }
+
+ thread->setError(error);
+ return EGL_TRUE;
+}
+
+EGLBoolean EGLAPIENTRY QueryStreamKHR(EGLDisplay dpy,
+ EGLStreamKHR stream,
+ EGLenum attribute,
+ EGLint *value)
+{
+ EVENT(
+ "(EGLDisplay dpy = 0x%0.8p, EGLStreamKHR stream = 0x%0.8p, EGLenum attribute = 0x%X, "
+ "EGLint value = 0x%0.8p)",
+ dpy, stream, attribute, value);
+ Thread *thread = GetCurrentThread();
+
+ Display *display = static_cast<Display *>(dpy);
+ Stream *streamObject = static_cast<Stream *>(stream);
+
+ Error error = ValidateQueryStreamKHR(display, streamObject, attribute, value);
+ if (error.isError())
+ {
+ thread->setError(error);
+ return EGL_FALSE;
+ }
+
+ switch (attribute)
+ {
+ case EGL_STREAM_STATE_KHR:
+ *value = streamObject->getState();
+ break;
+ case EGL_CONSUMER_LATENCY_USEC_KHR:
+ *value = streamObject->getConsumerLatency();
+ break;
+ case EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR:
+ *value = streamObject->getConsumerAcquireTimeout();
+ break;
+ default:
+ UNREACHABLE();
+ }
+
+ thread->setError(error);
+ return EGL_TRUE;
+}
+
+EGLBoolean EGLAPIENTRY QueryStreamu64KHR(EGLDisplay dpy,
+ EGLStreamKHR stream,
+ EGLenum attribute,
+ EGLuint64KHR *value)
+{
+ EVENT(
+ "(EGLDisplay dpy = 0x%0.8p, EGLStreamKHR stream = 0x%0.8p, EGLenum attribute = 0x%X, "
+ "EGLuint64KHR value = 0x%0.8p)",
+ dpy, stream, attribute, value);
+ Thread *thread = GetCurrentThread();
+
+ Display *display = static_cast<Display *>(dpy);
+ Stream *streamObject = static_cast<Stream *>(stream);
+
+ Error error = ValidateQueryStreamu64KHR(display, streamObject, attribute, value);
+ if (error.isError())
+ {
+ thread->setError(error);
+ return EGL_FALSE;
+ }
+
+ switch (attribute)
+ {
+ case EGL_PRODUCER_FRAME_KHR:
+ *value = streamObject->getProducerFrame();
+ break;
+ case EGL_CONSUMER_FRAME_KHR:
+ *value = streamObject->getConsumerFrame();
+ break;
+ default:
+ UNREACHABLE();
+ }
+
+ thread->setError(error);
+ return EGL_TRUE;
+}
+
+EGLBoolean EGLAPIENTRY StreamConsumerGLTextureExternalKHR(EGLDisplay dpy, EGLStreamKHR stream)
+{
+ EVENT("(EGLDisplay dpy = 0x%0.8p, EGLStreamKHR = 0x%0.8p)", dpy, stream);
+ Thread *thread = GetCurrentThread();
+
+ Display *display = static_cast<Display *>(dpy);
+ Stream *streamObject = static_cast<Stream *>(stream);
+ gl::Context *context = gl::GetValidGlobalContext();
+
+ Error error = ValidateStreamConsumerGLTextureExternalKHR(display, context, streamObject);
+ if (error.isError())
+ {
+ thread->setError(error);
+ return EGL_FALSE;
+ }
+
+ error = streamObject->createConsumerGLTextureExternal(AttributeMap(), context);
+ if (error.isError())
+ {
+ thread->setError(error);
+ return EGL_FALSE;
+ }
+
+ thread->setError(error);
+ return EGL_TRUE;
}
+
+EGLBoolean EGLAPIENTRY StreamConsumerAcquireKHR(EGLDisplay dpy, EGLStreamKHR stream)
+{
+ EVENT("(EGLDisplay dpy = 0x%0.8p, EGLStreamKHR = 0x%0.8p)", dpy, stream);
+ Thread *thread = GetCurrentThread();
+
+ Display *display = static_cast<Display *>(dpy);
+ Stream *streamObject = static_cast<Stream *>(stream);
+ gl::Context *context = gl::GetValidGlobalContext();
+
+ Error error = ValidateStreamConsumerAcquireKHR(display, context, streamObject);
+ if (error.isError())
+ {
+ thread->setError(error);
+ return EGL_FALSE;
+ }
+
+ error = streamObject->consumerAcquire(context);
+ if (error.isError())
+ {
+ thread->setError(error);
+ return EGL_FALSE;
+ }
+
+ thread->setError(error);
+ return EGL_TRUE;
+}
+
+EGLBoolean EGLAPIENTRY StreamConsumerReleaseKHR(EGLDisplay dpy, EGLStreamKHR stream)
+{
+ EVENT("(EGLDisplay dpy = 0x%0.8p, EGLStreamKHR = 0x%0.8p)", dpy, stream);
+ Thread *thread = GetCurrentThread();
+
+ Display *display = static_cast<Display *>(dpy);
+ Stream *streamObject = static_cast<Stream *>(stream);
+ gl::Context *context = gl::GetValidGlobalContext();
+
+ Error error = ValidateStreamConsumerReleaseKHR(display, context, streamObject);
+ if (error.isError())
+ {
+ thread->setError(error);
+ return EGL_FALSE;
+ }
+
+ error = streamObject->consumerRelease(context);
+ if (error.isError())
+ {
+ thread->setError(error);
+ return EGL_FALSE;
+ }
+
+ thread->setError(error);
+ return EGL_TRUE;
+}
+
+EGLBoolean EGLAPIENTRY StreamConsumerGLTextureExternalAttribsNV(EGLDisplay dpy,
+ EGLStreamKHR stream,
+ const EGLAttrib *attrib_list)
+{
+ EVENT(
+ "(EGLDisplay dpy = 0x%0.8p, EGLStreamKHR stream = 0x%0.8p, EGLAttrib attrib_list = 0x%0.8p",
+ dpy, stream, attrib_list);
+ Thread *thread = GetCurrentThread();
+
+ Display *display = static_cast<Display *>(dpy);
+ Stream *streamObject = static_cast<Stream *>(stream);
+ gl::Context *context = gl::GetValidGlobalContext();
+ AttributeMap attributes = AttributeMap::CreateFromAttribArray(attrib_list);
+
+ Error error = ValidateStreamConsumerGLTextureExternalAttribsNV(display, context, streamObject,
+ attributes);
+ if (error.isError())
+ {
+ thread->setError(error);
+ return EGL_FALSE;
+ }
+
+ error = streamObject->createConsumerGLTextureExternal(attributes, context);
+ if (error.isError())
+ {
+ thread->setError(error);
+ return EGL_FALSE;
+ }
+
+ thread->setError(error);
+ return EGL_TRUE;
+}
+
+EGLBoolean EGLAPIENTRY CreateStreamProducerD3DTextureNV12ANGLE(EGLDisplay dpy,
+ EGLStreamKHR stream,
+ const EGLAttrib *attrib_list)
+{
+ EVENT(
+ "(EGLDisplay dpy = 0x%0.8p, EGLStreamKHR stream = 0x%0.8p, EGLAttrib attrib_list = 0x%0.8p",
+ dpy, stream, attrib_list);
+ Thread *thread = GetCurrentThread();
+
+ Display *display = static_cast<Display *>(dpy);
+ Stream *streamObject = static_cast<Stream *>(stream);
+ AttributeMap attributes = AttributeMap::CreateFromAttribArray(attrib_list);
+
+ Error error =
+ ValidateCreateStreamProducerD3DTextureNV12ANGLE(display, streamObject, attributes);
+ if (error.isError())
+ {
+ thread->setError(error);
+ return EGL_FALSE;
+ }
+
+ error = streamObject->createProducerD3D11TextureNV12(attributes);
+ if (error.isError())
+ {
+ thread->setError(error);
+ return EGL_FALSE;
+ }
+
+ thread->setError(error);
+ return EGL_TRUE;
+}
+
+EGLBoolean EGLAPIENTRY StreamPostD3DTextureNV12ANGLE(EGLDisplay dpy,
+ EGLStreamKHR stream,
+ void *texture,
+ const EGLAttrib *attrib_list)
+{
+ EVENT(
+ "(EGLDisplay dpy = 0x%0.8p, EGLStreamKHR stream = 0x%0.8p, void* texture = 0x%0.8p, "
+ "EGLAttrib attrib_list = 0x%0.8p",
+ dpy, stream, texture, attrib_list);
+ Thread *thread = GetCurrentThread();
+
+ Display *display = static_cast<Display *>(dpy);
+ Stream *streamObject = static_cast<Stream *>(stream);
+ AttributeMap attributes = AttributeMap::CreateFromAttribArray(attrib_list);
+
+ Error error = ValidateStreamPostD3DTextureNV12ANGLE(display, streamObject, texture, attributes);
+ if (error.isError())
+ {
+ thread->setError(error);
+ return EGL_FALSE;
+ }
+
+ error = streamObject->postD3D11NV12Texture(texture, attributes);
+ if (error.isError())
+ {
+ thread->setError(error);
+ return EGL_FALSE;
+ }
+
+ thread->setError(error);
+ return EGL_TRUE;
+}
+
+EGLBoolean EGLAPIENTRY GetSyncValuesCHROMIUM(EGLDisplay dpy,
+ EGLSurface surface,
+ EGLuint64KHR *ust,
+ EGLuint64KHR *msc,
+ EGLuint64KHR *sbc)
+{
+ EVENT(
+ "(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLuint64KHR* ust = 0x%0.8p, "
+ "EGLuint64KHR* msc = 0x%0.8p, EGLuint64KHR* sbc = 0x%0.8p",
+ dpy, surface, ust, msc, sbc);
+ Thread *thread = GetCurrentThread();
+
+ Display *display = static_cast<Display *>(dpy);
+ Surface *eglSurface = static_cast<Surface *>(surface);
+
+ Error error = ValidateGetSyncValuesCHROMIUM(display, eglSurface, ust, msc, sbc);
+ if (error.isError())
+ {
+ thread->setError(error);
+ return EGL_FALSE;
+ }
+
+ error = eglSurface->getSyncValues(ust, msc, sbc);
+ if (error.isError())
+ {
+ thread->setError(error);
+ return EGL_FALSE;
+ }
+
+ thread->setError(error);
+ return EGL_TRUE;
+}
+
+ANGLE_EXPORT EGLBoolean SwapBuffersWithDamageEXT(EGLDisplay dpy,
+ EGLSurface surface,
+ EGLint *rects,
+ EGLint n_rects)
+{
+ EVENT(
+ "(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint *rects = 0x%0.8p, EGLint "
+ "n_rects = %d)",
+ dpy, surface, rects, n_rects);
+ Thread *thread = GetCurrentThread();
+
+ Display *display = static_cast<Display *>(dpy);
+ Surface *eglSurface = static_cast<Surface *>(surface);
+
+ Error error = ValidateSwapBuffersWithDamageEXT(display, eglSurface, rects, n_rects);
+ if (error.isError())
+ {
+ thread->setError(error);
+ return EGL_FALSE;
+ }
+
+ error = eglSurface->swapWithDamage(thread->getContext(), rects, n_rects);
+ if (error.isError())
+ {
+ thread->setError(error);
+ return EGL_FALSE;
+ }
+
+ return EGL_TRUE;
+}
+
+EGLint EGLAPIENTRY ProgramCacheGetAttribANGLE(EGLDisplay dpy, EGLenum attrib)
+{
+ EVENT("(EGLDisplay dpy = 0x%0.8p, EGLenum attrib = 0x%X)", dpy, attrib);
+
+ Display *display = static_cast<Display *>(dpy);
+ Thread *thread = GetCurrentThread();
+
+ ANGLE_EGL_TRY_RETURN(thread, ValidateProgramCacheGetAttribANGLE(display, attrib), 0);
+
+ return display->programCacheGetAttrib(attrib);
+}
+
+void EGLAPIENTRY ProgramCacheQueryANGLE(EGLDisplay dpy,
+ EGLint index,
+ void *key,
+ EGLint *keysize,
+ void *binary,
+ EGLint *binarysize)
+{
+ EVENT(
+ "(EGLDisplay dpy = 0x%0.8p, EGLint index = %d, void *key = 0x%0.8p, EGLint *keysize = "
+ "0x%0.8p, void *binary = 0x%0.8p, EGLint *size = 0x%0.8p)",
+ dpy, index, key, keysize, binary, binarysize);
+
+ Display *display = static_cast<Display *>(dpy);
+ Thread *thread = GetCurrentThread();
+
+ ANGLE_EGL_TRY(thread,
+ ValidateProgramCacheQueryANGLE(display, index, key, keysize, binary, binarysize));
+
+ ANGLE_EGL_TRY(thread, display->programCacheQuery(index, key, keysize, binary, binarysize));
+}
+
+void EGLAPIENTRY ProgramCachePopulateANGLE(EGLDisplay dpy,
+ const void *key,
+ EGLint keysize,
+ const void *binary,
+ EGLint binarysize)
+{
+ EVENT(
+ "(EGLDisplay dpy = 0x%0.8p, void *key = 0x%0.8p, EGLint keysize = %d, void *binary = "
+ "0x%0.8p, EGLint *size = 0x%0.8p)",
+ dpy, key, keysize, binary, binarysize);
+
+ Display *display = static_cast<Display *>(dpy);
+ Thread *thread = GetCurrentThread();
+
+ ANGLE_EGL_TRY(thread,
+ ValidateProgramCachePopulateANGLE(display, key, keysize, binary, binarysize));
+
+ ANGLE_EGL_TRY(thread, display->programCachePopulate(key, keysize, binary, binarysize));
+}
+
+EGLint EGLAPIENTRY ProgramCacheResizeANGLE(EGLDisplay dpy, EGLint limit, EGLenum mode)
+{
+ EVENT("(EGLDisplay dpy = 0x%0.8p, EGLint limit = %d, EGLenum mode = 0x%X)", dpy, limit, mode);
+
+ Display *display = static_cast<Display *>(dpy);
+ Thread *thread = GetCurrentThread();
+
+ ANGLE_EGL_TRY_RETURN(thread, ValidateProgramCacheResizeANGLE(display, limit, mode), 0);
+
+ return display->programCacheResize(limit, mode);
+}
+
+} // namespace egl
diff --git a/src/3rdparty/angle/src/libGLESv2/entry_points_egl_ext.h b/src/3rdparty/angle/src/libGLESv2/entry_points_egl_ext.h
index d64fa6e483..3cde6ec9c6 100644
--- a/src/3rdparty/angle/src/libGLESv2/entry_points_egl_ext.h
+++ b/src/3rdparty/angle/src/libGLESv2/entry_points_egl_ext.h
@@ -43,6 +43,71 @@ ANGLE_EXPORT EGLDeviceEXT EGLAPIENTRY CreateDeviceANGLE(EGLint device_type,
void *native_device,
const EGLAttrib *attrib_list);
ANGLE_EXPORT EGLBoolean EGLAPIENTRY ReleaseDeviceANGLE(EGLDeviceEXT device);
-}
+
+// EGL_KHR_stream
+ANGLE_EXPORT EGLStreamKHR EGLAPIENTRY CreateStreamKHR(EGLDisplay dpy, const EGLint *attrib_list);
+ANGLE_EXPORT EGLBoolean EGLAPIENTRY DestroyStreamKHR(EGLDisplay dpy, EGLStreamKHR stream);
+ANGLE_EXPORT EGLBoolean EGLAPIENTRY StreamAttribKHR(EGLDisplay dpy,
+ EGLStreamKHR stream,
+ EGLenum attribute,
+ EGLint value);
+ANGLE_EXPORT EGLBoolean EGLAPIENTRY QueryStreamKHR(EGLDisplay dpy,
+ EGLStreamKHR stream,
+ EGLenum attribute,
+ EGLint *value);
+ANGLE_EXPORT EGLBoolean EGLAPIENTRY QueryStreamu64KHR(EGLDisplay dpy,
+ EGLStreamKHR stream,
+ EGLenum attribute,
+ EGLuint64KHR *value);
+
+// EGL_KHR_stream_consumer_gltexture
+ANGLE_EXPORT EGLBoolean EGLAPIENTRY StreamConsumerGLTextureExternalKHR(EGLDisplay dpy,
+ EGLStreamKHR stream);
+ANGLE_EXPORT EGLBoolean EGLAPIENTRY StreamConsumerAcquireKHR(EGLDisplay dpy, EGLStreamKHR stream);
+ANGLE_EXPORT EGLBoolean EGLAPIENTRY StreamConsumerReleaseKHR(EGLDisplay dpy, EGLStreamKHR stream);
+ANGLE_EXPORT EGLBoolean EGLAPIENTRY
+StreamConsumerGLTextureExternalAttribsNV(EGLDisplay dpy,
+ EGLStreamKHR stream,
+ const EGLAttrib *attrib_list);
+
+// EGL_ANGLE_stream_producer_d3d_texture_nv12
+ANGLE_EXPORT EGLBoolean EGLAPIENTRY
+CreateStreamProducerD3DTextureNV12ANGLE(EGLDisplay dpy,
+ EGLStreamKHR stream,
+ const EGLAttrib *attrib_list);
+ANGLE_EXPORT EGLBoolean EGLAPIENTRY StreamPostD3DTextureNV12ANGLE(EGLDisplay dpy,
+ EGLStreamKHR stream,
+ void *texture,
+ const EGLAttrib *attrib_list);
+
+// EGL_CHROMIUM_get_sync_values
+ANGLE_EXPORT EGLBoolean EGLAPIENTRY GetSyncValuesCHROMIUM(EGLDisplay dpy,
+ EGLSurface surface,
+ EGLuint64KHR *ust,
+ EGLuint64KHR *msc,
+ EGLuint64KHR *sbc);
+
+// EGL_EXT_swap_buffers_with_damage
+ANGLE_EXPORT EGLBoolean SwapBuffersWithDamageEXT(EGLDisplay dpy,
+ EGLSurface surface,
+ EGLint *rects,
+ EGLint n_rects);
+
+//
+ANGLE_EXPORT EGLint EGLAPIENTRY ProgramCacheGetAttribANGLE(EGLDisplay dpy, EGLenum attrib);
+ANGLE_EXPORT void EGLAPIENTRY ProgramCacheQueryANGLE(EGLDisplay dpy,
+ EGLint index,
+ void *key,
+ EGLint *keysize,
+ void *binary,
+ EGLint *binarysize);
+ANGLE_EXPORT void EGLAPIENTRY ProgramCachePopulateANGLE(EGLDisplay dpy,
+ const void *key,
+ EGLint keysize,
+ const void *binary,
+ EGLint binarysize);
+ANGLE_EXPORT EGLint EGLAPIENTRY ProgramCacheResizeANGLE(EGLDisplay dpy, EGLint limit, EGLenum mode);
+
+} // namespace egl
#endif // LIBGLESV2_ENTRYPOINTSEGLEXT_H_
diff --git a/src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0.cpp b/src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0.cpp
deleted file mode 100644
index 336b320ba5..0000000000
--- a/src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0.cpp
+++ /dev/null
@@ -1,4155 +0,0 @@
-//
-// Copyright(c) 2014 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.
-//
-
-// entry_points_gles_2_0.cpp : Implements the GLES 2.0 entry points.
-
-#include "libGLESv2/entry_points_gles_2_0.h"
-#include "libGLESv2/global_state.h"
-
-#include "libANGLE/formatutils.h"
-#include "libANGLE/Buffer.h"
-#include "libANGLE/Compiler.h"
-#include "libANGLE/Context.h"
-#include "libANGLE/Error.h"
-#include "libANGLE/Framebuffer.h"
-#include "libANGLE/Renderbuffer.h"
-#include "libANGLE/Shader.h"
-#include "libANGLE/Program.h"
-#include "libANGLE/Texture.h"
-#include "libANGLE/VertexArray.h"
-#include "libANGLE/VertexAttribute.h"
-#include "libANGLE/FramebufferAttachment.h"
-
-#include "libANGLE/validationES.h"
-#include "libANGLE/validationES2.h"
-#include "libANGLE/validationES3.h"
-#include "libANGLE/queryconversions.h"
-
-#include "common/debug.h"
-#include "common/utilities.h"
-#include "common/version.h"
-
-namespace gl
-{
-
-void GL_APIENTRY ActiveTexture(GLenum texture)
-{
- EVENT("(GLenum texture = 0x%X)", texture);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (texture < GL_TEXTURE0 || texture > GL_TEXTURE0 + context->getCaps().maxCombinedTextureImageUnits - 1)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- context->getState().setActiveSampler(texture - GL_TEXTURE0);
- }
-}
-
-void GL_APIENTRY AttachShader(GLuint program, GLuint shader)
-{
- EVENT("(GLuint program = %d, GLuint shader = %d)", program, shader);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- Program *programObject = GetValidProgram(context, program);
- if (!programObject)
- {
- return;
- }
-
- Shader *shaderObject = GetValidShader(context, shader);
- if (!shaderObject)
- {
- return;
- }
-
- if (!programObject->attachShader(shaderObject))
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
- }
-}
-
-void GL_APIENTRY BindAttribLocation(GLuint program, GLuint index, const GLchar* name)
-{
- EVENT("(GLuint program = %d, GLuint index = %d, const GLchar* name = 0x%0.8p)", program, index, name);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (index >= MAX_VERTEX_ATTRIBS)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- Program *programObject = GetValidProgram(context, program);
-
- if (!programObject)
- {
- return;
- }
-
- if (strncmp(name, "gl_", 3) == 0)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- programObject->bindAttributeLocation(index, name);
- }
-}
-
-void GL_APIENTRY BindBuffer(GLenum target, GLuint buffer)
-{
- EVENT("(GLenum target = 0x%X, GLuint buffer = %d)", target, buffer);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidBufferTarget(context, target))
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- switch (target)
- {
- case GL_ARRAY_BUFFER:
- context->bindArrayBuffer(buffer);
- return;
- case GL_ELEMENT_ARRAY_BUFFER:
- context->bindElementArrayBuffer(buffer);
- return;
- case GL_COPY_READ_BUFFER:
- context->bindCopyReadBuffer(buffer);
- return;
- case GL_COPY_WRITE_BUFFER:
- context->bindCopyWriteBuffer(buffer);
- return;
- case GL_PIXEL_PACK_BUFFER:
- context->bindPixelPackBuffer(buffer);
- return;
- case GL_PIXEL_UNPACK_BUFFER:
- context->bindPixelUnpackBuffer(buffer);
- return;
- case GL_UNIFORM_BUFFER:
- context->bindGenericUniformBuffer(buffer);
- return;
- case GL_TRANSFORM_FEEDBACK_BUFFER:
- context->bindGenericTransformFeedbackBuffer(buffer);
- return;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- }
-}
-
-void GL_APIENTRY BindFramebuffer(GLenum target, GLuint framebuffer)
-{
- EVENT("(GLenum target = 0x%X, GLuint framebuffer = %d)", target, framebuffer);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidFramebufferTarget(target))
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- if (target == GL_READ_FRAMEBUFFER_ANGLE || target == GL_FRAMEBUFFER)
- {
- context->bindReadFramebuffer(framebuffer);
- }
-
- if (target == GL_DRAW_FRAMEBUFFER_ANGLE || target == GL_FRAMEBUFFER)
- {
- context->bindDrawFramebuffer(framebuffer);
- }
- }
-}
-
-void GL_APIENTRY BindRenderbuffer(GLenum target, GLuint renderbuffer)
-{
- EVENT("(GLenum target = 0x%X, GLuint renderbuffer = %d)", target, renderbuffer);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (target != GL_RENDERBUFFER)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- context->bindRenderbuffer(renderbuffer);
- }
-}
-
-void GL_APIENTRY BindTexture(GLenum target, GLuint texture)
-{
- EVENT("(GLenum target = 0x%X, GLuint texture = %d)", target, texture);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- Texture *textureObject = context->getTexture(texture);
-
- if (textureObject && textureObject->getTarget() != target && texture != 0)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- switch (target)
- {
- case GL_TEXTURE_2D:
- case GL_TEXTURE_CUBE_MAP:
- break;
-
- case GL_TEXTURE_3D:
- case GL_TEXTURE_2D_ARRAY:
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- context->bindTexture(target, texture);
- }
-}
-
-void GL_APIENTRY BlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
-{
- EVENT("(GLclampf red = %f, GLclampf green = %f, GLclampf blue = %f, GLclampf alpha = %f)",
- red, green, blue, alpha);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- context->getState().setBlendColor(clamp01(red), clamp01(green), clamp01(blue), clamp01(alpha));
- }
-}
-
-void GL_APIENTRY BlendEquation(GLenum mode)
-{
- BlendEquationSeparate(mode, mode);
-}
-
-void GL_APIENTRY BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
-{
- EVENT("(GLenum modeRGB = 0x%X, GLenum modeAlpha = 0x%X)", modeRGB, modeAlpha);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- switch (modeRGB)
- {
- case GL_FUNC_ADD:
- case GL_FUNC_SUBTRACT:
- case GL_FUNC_REVERSE_SUBTRACT:
- case GL_MIN:
- case GL_MAX:
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- switch (modeAlpha)
- {
- case GL_FUNC_ADD:
- case GL_FUNC_SUBTRACT:
- case GL_FUNC_REVERSE_SUBTRACT:
- case GL_MIN:
- case GL_MAX:
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- context->getState().setBlendEquation(modeRGB, modeAlpha);
- }
-}
-
-void GL_APIENTRY BlendFunc(GLenum sfactor, GLenum dfactor)
-{
- BlendFuncSeparate(sfactor, dfactor, sfactor, dfactor);
-}
-
-void GL_APIENTRY BlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
-{
- EVENT("(GLenum srcRGB = 0x%X, GLenum dstRGB = 0x%X, GLenum srcAlpha = 0x%X, GLenum dstAlpha = 0x%X)",
- srcRGB, dstRGB, srcAlpha, dstAlpha);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- switch (srcRGB)
- {
- case GL_ZERO:
- case GL_ONE:
- case GL_SRC_COLOR:
- case GL_ONE_MINUS_SRC_COLOR:
- case GL_DST_COLOR:
- case GL_ONE_MINUS_DST_COLOR:
- case GL_SRC_ALPHA:
- case GL_ONE_MINUS_SRC_ALPHA:
- case GL_DST_ALPHA:
- case GL_ONE_MINUS_DST_ALPHA:
- case GL_CONSTANT_COLOR:
- case GL_ONE_MINUS_CONSTANT_COLOR:
- case GL_CONSTANT_ALPHA:
- case GL_ONE_MINUS_CONSTANT_ALPHA:
- case GL_SRC_ALPHA_SATURATE:
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- switch (dstRGB)
- {
- case GL_ZERO:
- case GL_ONE:
- case GL_SRC_COLOR:
- case GL_ONE_MINUS_SRC_COLOR:
- case GL_DST_COLOR:
- case GL_ONE_MINUS_DST_COLOR:
- case GL_SRC_ALPHA:
- case GL_ONE_MINUS_SRC_ALPHA:
- case GL_DST_ALPHA:
- case GL_ONE_MINUS_DST_ALPHA:
- case GL_CONSTANT_COLOR:
- case GL_ONE_MINUS_CONSTANT_COLOR:
- case GL_CONSTANT_ALPHA:
- case GL_ONE_MINUS_CONSTANT_ALPHA:
- break;
-
- case GL_SRC_ALPHA_SATURATE:
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- switch (srcAlpha)
- {
- case GL_ZERO:
- case GL_ONE:
- case GL_SRC_COLOR:
- case GL_ONE_MINUS_SRC_COLOR:
- case GL_DST_COLOR:
- case GL_ONE_MINUS_DST_COLOR:
- case GL_SRC_ALPHA:
- case GL_ONE_MINUS_SRC_ALPHA:
- case GL_DST_ALPHA:
- case GL_ONE_MINUS_DST_ALPHA:
- case GL_CONSTANT_COLOR:
- case GL_ONE_MINUS_CONSTANT_COLOR:
- case GL_CONSTANT_ALPHA:
- case GL_ONE_MINUS_CONSTANT_ALPHA:
- case GL_SRC_ALPHA_SATURATE:
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- switch (dstAlpha)
- {
- case GL_ZERO:
- case GL_ONE:
- case GL_SRC_COLOR:
- case GL_ONE_MINUS_SRC_COLOR:
- case GL_DST_COLOR:
- case GL_ONE_MINUS_DST_COLOR:
- case GL_SRC_ALPHA:
- case GL_ONE_MINUS_SRC_ALPHA:
- case GL_DST_ALPHA:
- case GL_ONE_MINUS_DST_ALPHA:
- case GL_CONSTANT_COLOR:
- case GL_ONE_MINUS_CONSTANT_COLOR:
- case GL_CONSTANT_ALPHA:
- case GL_ONE_MINUS_CONSTANT_ALPHA:
- break;
-
- case GL_SRC_ALPHA_SATURATE:
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- if (context->getLimitations().noSimultaneousConstantColorAndAlphaBlendFunc)
- {
- bool constantColorUsed =
- (srcRGB == GL_CONSTANT_COLOR || srcRGB == GL_ONE_MINUS_CONSTANT_COLOR ||
- dstRGB == GL_CONSTANT_COLOR || dstRGB == GL_ONE_MINUS_CONSTANT_COLOR);
-
- bool constantAlphaUsed =
- (srcRGB == GL_CONSTANT_ALPHA || srcRGB == GL_ONE_MINUS_CONSTANT_ALPHA ||
- dstRGB == GL_CONSTANT_ALPHA || dstRGB == GL_ONE_MINUS_CONSTANT_ALPHA);
-
- if (constantColorUsed && constantAlphaUsed)
- {
- ERR(
- "Simultaneous use of GL_CONSTANT_ALPHA/GL_ONE_MINUS_CONSTANT_ALPHA and "
- "GL_CONSTANT_COLOR/GL_ONE_MINUS_CONSTANT_COLOR not supported by this "
- "implementation.");
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
- }
-
- context->getState().setBlendFactors(srcRGB, dstRGB, srcAlpha, dstAlpha);
- }
-}
-
-void GL_APIENTRY BufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage)
-{
- EVENT("(GLenum target = 0x%X, GLsizeiptr size = %d, const GLvoid* data = 0x%0.8p, GLenum usage = %d)",
- target, size, data, usage);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (size < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- switch (usage)
- {
- case GL_STREAM_DRAW:
- case GL_STATIC_DRAW:
- case GL_DYNAMIC_DRAW:
- break;
-
- case GL_STREAM_READ:
- case GL_STREAM_COPY:
- case GL_STATIC_READ:
- case GL_STATIC_COPY:
- case GL_DYNAMIC_READ:
- case GL_DYNAMIC_COPY:
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- if (!ValidBufferTarget(context, target))
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- Buffer *buffer = context->getState().getTargetBuffer(target);
-
- if (!buffer)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- Error error = buffer->bufferData(data, size, usage);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
-}
-
-void GL_APIENTRY BufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data)
-{
- EVENT("(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr size = %d, const GLvoid* data = 0x%0.8p)",
- target, offset, size, data);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (size < 0 || offset < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- if (!ValidBufferTarget(context, target))
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- Buffer *buffer = context->getState().getTargetBuffer(target);
-
- if (!buffer)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (buffer->isMapped())
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- // Check for possible overflow of size + offset
- if (!rx::IsUnsignedAdditionSafe<size_t>(size, offset))
- {
- context->recordError(Error(GL_OUT_OF_MEMORY));
- return;
- }
-
- if (size + offset > buffer->getSize())
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- if (data == NULL)
- {
- return;
- }
-
- Error error = buffer->bufferSubData(data, size, offset);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
-}
-
-GLenum GL_APIENTRY CheckFramebufferStatus(GLenum target)
-{
- EVENT("(GLenum target = 0x%X)", target);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidFramebufferTarget(target))
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return 0;
- }
-
- Framebuffer *framebuffer = context->getState().getTargetFramebuffer(target);
- ASSERT(framebuffer);
-
- return framebuffer->checkStatus(context->getData());
- }
-
- return 0;
-}
-
-void GL_APIENTRY Clear(GLbitfield mask)
-{
- EVENT("(GLbitfield mask = 0x%X)", mask);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!context->skipValidation() && !ValidateClear(context, mask))
- {
- return;
- }
-
- context->clear(mask);
- }
-}
-
-void GL_APIENTRY ClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
-{
- EVENT("(GLclampf red = %f, GLclampf green = %f, GLclampf blue = %f, GLclampf alpha = %f)",
- red, green, blue, alpha);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- context->getState().setColorClearValue(red, green, blue, alpha);
- }
-}
-
-void GL_APIENTRY ClearDepthf(GLclampf depth)
-{
- EVENT("(GLclampf depth = %f)", depth);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- context->getState().setDepthClearValue(depth);
- }
-}
-
-void GL_APIENTRY ClearStencil(GLint s)
-{
- EVENT("(GLint s = %d)", s);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- context->getState().setStencilClearValue(s);
- }
-}
-
-void GL_APIENTRY ColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
-{
- EVENT("(GLboolean red = %d, GLboolean green = %u, GLboolean blue = %u, GLboolean alpha = %u)",
- red, green, blue, alpha);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- context->getState().setColorMask(red == GL_TRUE, green == GL_TRUE, blue == GL_TRUE, alpha == GL_TRUE);
- }
-}
-
-void GL_APIENTRY CompileShader(GLuint shader)
-{
- EVENT("(GLuint shader = %d)", shader);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- Shader *shaderObject = GetValidShader(context, shader);
- if (!shaderObject)
- {
- return;
- }
- shaderObject->compile(context->getCompiler());
- }
-}
-
-void GL_APIENTRY CompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
- GLint border, GLsizei imageSize, const GLvoid* data)
-{
- EVENT("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, GLsizei width = %d, "
- "GLsizei height = %d, GLint border = %d, GLsizei imageSize = %d, const GLvoid* data = 0x%0.8p)",
- target, level, internalformat, width, height, border, imageSize, data);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3 &&
- !ValidateES2TexImageParameters(context, target, level, internalformat, true, false,
- 0, 0, width, height, border, GL_NONE, GL_NONE, data))
- {
- return;
- }
-
- if (context->getClientVersion() >= 3 &&
- !ValidateES3TexImage2DParameters(context, target, level, internalformat, true, false, 0,
- 0, 0, width, height, 1, border, GL_NONE, GL_NONE,
- data))
- {
- return;
- }
-
- const InternalFormat &formatInfo = GetInternalFormatInfo(internalformat);
- if (imageSize < 0 || static_cast<GLuint>(imageSize) != formatInfo.computeBlockSize(GL_UNSIGNED_BYTE, width, height))
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- Extents size(width, height, 1);
- Texture *texture = context->getTargetTexture(IsCubeMapTextureTarget(target) ? GL_TEXTURE_CUBE_MAP : target);
- Error error =
- texture->setCompressedImage(context, target, level, internalformat, size, imageSize,
- reinterpret_cast<const uint8_t *>(data));
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
-}
-
-void GL_APIENTRY CompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
- GLenum format, GLsizei imageSize, const GLvoid* data)
-{
- EVENT("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
- "GLsizei width = %d, GLsizei height = %d, GLenum format = 0x%X, "
- "GLsizei imageSize = %d, const GLvoid* data = 0x%0.8p)",
- target, level, xoffset, yoffset, width, height, format, imageSize, data);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3 &&
- !ValidateES2TexImageParameters(context, target, level, GL_NONE, true, true,
- xoffset, yoffset, width, height, 0, GL_NONE, GL_NONE, data))
- {
- return;
- }
-
- if (context->getClientVersion() >= 3 &&
- !ValidateES3TexImage2DParameters(context, target, level, GL_NONE, true, true, xoffset,
- yoffset, 0, width, height, 1, 0, GL_NONE, GL_NONE,
- data))
- {
- return;
- }
-
- const InternalFormat &formatInfo = GetInternalFormatInfo(format);
- if (imageSize < 0 || static_cast<GLuint>(imageSize) != formatInfo.computeBlockSize(GL_UNSIGNED_BYTE, width, height))
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- Box area(xoffset, yoffset, 0, width, height, 1);
- Texture *texture = context->getTargetTexture(IsCubeMapTextureTarget(target) ? GL_TEXTURE_CUBE_MAP : target);
- Error error =
- texture->setCompressedSubImage(context, target, level, area, format, imageSize,
- reinterpret_cast<const uint8_t *>(data));
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
-}
-
-void GL_APIENTRY CopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
-{
- EVENT("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, "
- "GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, GLint border = %d)",
- target, level, internalformat, x, y, width, height, border);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!context->skipValidation() &&
- !ValidateCopyTexImage2D(context, target, level, internalformat, x, y, width, height,
- border))
- {
- return;
- }
- context->copyTexImage2D(target, level, internalformat, x, y, width, height, border);
- }
-}
-
-void GL_APIENTRY CopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
-{
- EVENT("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
- "GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)",
- target, level, xoffset, yoffset, x, y, width, height);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!context->skipValidation() &&
- !ValidateCopyTexSubImage2D(context, target, level, xoffset, yoffset, x, y, width,
- height))
- {
- return;
- }
-
- context->copyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
- }
-}
-
-GLuint GL_APIENTRY CreateProgram(void)
-{
- EVENT("()");
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- return context->createProgram();
- }
-
- return 0;
-}
-
-GLuint GL_APIENTRY CreateShader(GLenum type)
-{
- EVENT("(GLenum type = 0x%X)", type);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- switch (type)
- {
- case GL_FRAGMENT_SHADER:
- case GL_VERTEX_SHADER:
- return context->createShader(type);
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return 0;
- }
- }
-
- return 0;
-}
-
-void GL_APIENTRY CullFace(GLenum mode)
-{
- EVENT("(GLenum mode = 0x%X)", mode);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- switch (mode)
- {
- case GL_FRONT:
- case GL_BACK:
- case GL_FRONT_AND_BACK:
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- context->getState().setCullMode(mode);
- }
-}
-
-void GL_APIENTRY DeleteBuffers(GLsizei n, const GLuint* buffers)
-{
- EVENT("(GLsizei n = %d, const GLuint* buffers = 0x%0.8p)", n, buffers);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (n < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- for (int i = 0; i < n; i++)
- {
- context->deleteBuffer(buffers[i]);
- }
- }
-}
-
-void GL_APIENTRY DeleteFramebuffers(GLsizei n, const GLuint* framebuffers)
-{
- EVENT("(GLsizei n = %d, const GLuint* framebuffers = 0x%0.8p)", n, framebuffers);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (n < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- for (int i = 0; i < n; i++)
- {
- if (framebuffers[i] != 0)
- {
- context->deleteFramebuffer(framebuffers[i]);
- }
- }
- }
-}
-
-void GL_APIENTRY DeleteProgram(GLuint program)
-{
- EVENT("(GLuint program = %d)", program);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (program == 0)
- {
- return;
- }
-
- if (!context->getProgram(program))
- {
- if(context->getShader(program))
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
- else
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
- }
-
- context->deleteProgram(program);
- }
-}
-
-void GL_APIENTRY DeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers)
-{
- EVENT("(GLsizei n = %d, const GLuint* renderbuffers = 0x%0.8p)", n, renderbuffers);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (n < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- for (int i = 0; i < n; i++)
- {
- context->deleteRenderbuffer(renderbuffers[i]);
- }
- }
-}
-
-void GL_APIENTRY DeleteShader(GLuint shader)
-{
- EVENT("(GLuint shader = %d)", shader);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (shader == 0)
- {
- return;
- }
-
- if (!context->getShader(shader))
- {
- if(context->getProgram(shader))
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
- else
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
- }
-
- context->deleteShader(shader);
- }
-}
-
-void GL_APIENTRY DeleteTextures(GLsizei n, const GLuint* textures)
-{
- EVENT("(GLsizei n = %d, const GLuint* textures = 0x%0.8p)", n, textures);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (n < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- for (int i = 0; i < n; i++)
- {
- if (textures[i] != 0)
- {
- context->deleteTexture(textures[i]);
- }
- }
- }
-}
-
-void GL_APIENTRY DepthFunc(GLenum func)
-{
- EVENT("(GLenum func = 0x%X)", func);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- switch (func)
- {
- case GL_NEVER:
- case GL_ALWAYS:
- case GL_LESS:
- case GL_LEQUAL:
- case GL_EQUAL:
- case GL_GREATER:
- case GL_GEQUAL:
- case GL_NOTEQUAL:
- context->getState().setDepthFunc(func);
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- }
-}
-
-void GL_APIENTRY DepthMask(GLboolean flag)
-{
- EVENT("(GLboolean flag = %u)", flag);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- context->getState().setDepthMask(flag != GL_FALSE);
- }
-}
-
-void GL_APIENTRY DepthRangef(GLclampf zNear, GLclampf zFar)
-{
- EVENT("(GLclampf zNear = %f, GLclampf zFar = %f)", zNear, zFar);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- context->getState().setDepthRange(zNear, zFar);
- }
-}
-
-void GL_APIENTRY DetachShader(GLuint program, GLuint shader)
-{
- EVENT("(GLuint program = %d, GLuint shader = %d)", program, shader);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- Program *programObject = GetValidProgram(context, program);
- if (!programObject)
- {
- return;
- }
-
- Shader *shaderObject = GetValidShader(context, shader);
- if (!shaderObject)
- {
- return;
- }
-
- if (!programObject->detachShader(shaderObject))
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
- }
-}
-
-void GL_APIENTRY Disable(GLenum cap)
-{
- EVENT("(GLenum cap = 0x%X)", cap);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidCap(context, cap))
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- context->getState().setEnableFeature(cap, false);
- }
-}
-
-void GL_APIENTRY DisableVertexAttribArray(GLuint index)
-{
- EVENT("(GLuint index = %d)", index);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (index >= MAX_VERTEX_ATTRIBS)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- context->getState().setEnableVertexAttribArray(index, false);
- }
-}
-
-void GL_APIENTRY DrawArrays(GLenum mode, GLint first, GLsizei count)
-{
- EVENT("(GLenum mode = 0x%X, GLint first = %d, GLsizei count = %d)", mode, first, count);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateDrawArrays(context, mode, first, count, 0))
- {
- return;
- }
-
- Error error = context->drawArrays(mode, first, count);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
-}
-
-void GL_APIENTRY DrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices)
-{
- EVENT("(GLenum mode = 0x%X, GLsizei count = %d, GLenum type = 0x%X, const GLvoid* indices = 0x%0.8p)",
- mode, count, type, indices);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- IndexRange indexRange;
- if (!ValidateDrawElements(context, mode, count, type, indices, 0, &indexRange))
- {
- return;
- }
-
- Error error = context->drawElements(mode, count, type, indices, indexRange);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
-}
-
-void GL_APIENTRY Enable(GLenum cap)
-{
- EVENT("(GLenum cap = 0x%X)", cap);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidCap(context, cap))
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- if (context->getLimitations().noSampleAlphaToCoverageSupport)
- {
- if (cap == GL_SAMPLE_ALPHA_TO_COVERAGE)
- {
- const char *errorMessage = "Current renderer doesn't support alpha-to-coverage";
- context->recordError(Error(GL_INVALID_OPERATION, errorMessage));
-
- // We also output an error message to the debugger window if tracing is active, so that developers can see the error message.
- ERR("%s", errorMessage);
-
- return;
- }
- }
-
- context->getState().setEnableFeature(cap, true);
- }
-}
-
-void GL_APIENTRY EnableVertexAttribArray(GLuint index)
-{
- EVENT("(GLuint index = %d)", index);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (index >= MAX_VERTEX_ATTRIBS)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- context->getState().setEnableVertexAttribArray(index, true);
- }
-}
-
-void GL_APIENTRY Finish(void)
-{
- EVENT("()");
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- Error error = context->finish();
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
-}
-
-void GL_APIENTRY Flush(void)
-{
- EVENT("()");
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- Error error = context->flush();
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
-}
-
-void GL_APIENTRY FramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
-{
- EVENT("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum renderbuffertarget = 0x%X, "
- "GLuint renderbuffer = %d)", target, attachment, renderbuffertarget, renderbuffer);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!context->skipValidation() &&
- !ValidateFramebufferRenderbuffer(context, target, attachment, renderbuffertarget,
- renderbuffer))
- {
- return;
- }
-
- context->framebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
- }
-}
-
-void GL_APIENTRY FramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
-{
- EVENT("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum textarget = 0x%X, "
- "GLuint texture = %d, GLint level = %d)", target, attachment, textarget, texture, level);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!context->skipValidation() &&
- !ValidateFramebufferTexture2D(context, target, attachment, textarget, texture, level))
- {
- return;
- }
-
- context->framebufferTexture2D(target, attachment, textarget, texture, level);
- }
-}
-
-void GL_APIENTRY FrontFace(GLenum mode)
-{
- EVENT("(GLenum mode = 0x%X)", mode);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- switch (mode)
- {
- case GL_CW:
- case GL_CCW:
- context->getState().setFrontFace(mode);
- break;
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- }
-}
-
-void GL_APIENTRY GenBuffers(GLsizei n, GLuint* buffers)
-{
- EVENT("(GLsizei n = %d, GLuint* buffers = 0x%0.8p)", n, buffers);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (n < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- for (int i = 0; i < n; i++)
- {
- buffers[i] = context->createBuffer();
- }
- }
-}
-
-void GL_APIENTRY GenerateMipmap(GLenum target)
-{
- EVENT("(GLenum target = 0x%X)", target);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidTextureTarget(context, target))
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- Texture *texture = context->getTargetTexture(target);
-
- if (texture == NULL)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- GLenum baseTarget = (target == GL_TEXTURE_CUBE_MAP) ? GL_TEXTURE_CUBE_MAP_POSITIVE_X : target;
- GLenum internalFormat = texture->getInternalFormat(baseTarget, 0);
- const TextureCaps &formatCaps = context->getTextureCaps().get(internalFormat);
- const InternalFormat &formatInfo = GetInternalFormatInfo(internalFormat);
-
- // GenerateMipmap should not generate an INVALID_OPERATION for textures created with
- // unsized formats or that are color renderable and filterable. Since we do not track if
- // the texture was created with sized or unsized format (only sized formats are stored),
- // it is not possible to make sure the the LUMA formats can generate mipmaps (they should
- // be able to) because they aren't color renderable. Simply do a special case for LUMA
- // textures since they're the only texture format that can be created with unsized formats
- // that is not color renderable. New unsized formats are unlikely to be added, since ES2
- // was the last version to use add them.
- bool isLUMA = internalFormat == GL_LUMINANCE8_EXT ||
- internalFormat == GL_LUMINANCE8_ALPHA8_EXT ||
- internalFormat == GL_ALPHA8_EXT;
-
- if (formatInfo.depthBits > 0 || formatInfo.stencilBits > 0 || !formatCaps.filterable ||
- (!formatCaps.renderable && !isLUMA) || formatInfo.compressed)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- // GL_EXT_sRGB does not support mipmap generation on sRGB textures
- if (context->getClientVersion() == 2 && formatInfo.colorEncoding == GL_SRGB)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- // Non-power of 2 ES2 check
- if (!context->getExtensions().textureNPOT &&
- (!isPow2(static_cast<int>(texture->getWidth(baseTarget, 0))) ||
- !isPow2(static_cast<int>(texture->getHeight(baseTarget, 0)))))
- {
- ASSERT(context->getClientVersion() <= 2 && (target == GL_TEXTURE_2D || target == GL_TEXTURE_CUBE_MAP));
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- // Cube completeness check
- if (target == GL_TEXTURE_CUBE_MAP && !texture->isCubeComplete())
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- Error error = texture->generateMipmaps();
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
-}
-
-void GL_APIENTRY GenFramebuffers(GLsizei n, GLuint* framebuffers)
-{
- EVENT("(GLsizei n = %d, GLuint* framebuffers = 0x%0.8p)", n, framebuffers);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (n < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- for (int i = 0; i < n; i++)
- {
- framebuffers[i] = context->createFramebuffer();
- }
- }
-}
-
-void GL_APIENTRY GenRenderbuffers(GLsizei n, GLuint* renderbuffers)
-{
- EVENT("(GLsizei n = %d, GLuint* renderbuffers = 0x%0.8p)", n, renderbuffers);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (n < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- for (int i = 0; i < n; i++)
- {
- renderbuffers[i] = context->createRenderbuffer();
- }
- }
-}
-
-void GL_APIENTRY GenTextures(GLsizei n, GLuint* textures)
-{
- EVENT("(GLsizei n = %d, GLuint* textures = 0x%0.8p)", n, textures);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (n < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- for (int i = 0; i < n; i++)
- {
- textures[i] = context->createTexture();
- }
- }
-}
-
-void GL_APIENTRY GetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, GLchar *name)
-{
- EVENT("(GLuint program = %d, GLuint index = %d, GLsizei bufsize = %d, GLsizei *length = 0x%0.8p, "
- "GLint *size = 0x%0.8p, GLenum *type = %0.8p, GLchar *name = %0.8p)",
- program, index, bufsize, length, size, type, name);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (bufsize < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- Program *programObject = GetValidProgram(context, program);
-
- if (!programObject)
- {
- return;
- }
-
- if (index >= (GLuint)programObject->getActiveAttributeCount())
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- programObject->getActiveAttribute(index, bufsize, length, size, type, name);
- }
-}
-
-void GL_APIENTRY GetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name)
-{
- EVENT("(GLuint program = %d, GLuint index = %d, GLsizei bufsize = %d, "
- "GLsizei* length = 0x%0.8p, GLint* size = 0x%0.8p, GLenum* type = 0x%0.8p, GLchar* name = 0x%0.8p)",
- program, index, bufsize, length, size, type, name);
-
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (bufsize < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- Program *programObject = GetValidProgram(context, program);
-
- if (!programObject)
- {
- return;
- }
-
- if (index >= (GLuint)programObject->getActiveUniformCount())
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- programObject->getActiveUniform(index, bufsize, length, size, type, name);
- }
-}
-
-void GL_APIENTRY GetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
-{
- EVENT("(GLuint program = %d, GLsizei maxcount = %d, GLsizei* count = 0x%0.8p, GLuint* shaders = 0x%0.8p)",
- program, maxcount, count, shaders);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (maxcount < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- Program *programObject = GetValidProgram(context, program);
-
- if (!programObject)
- {
- return;
- }
-
- return programObject->getAttachedShaders(maxcount, count, shaders);
- }
-}
-
-GLint GL_APIENTRY GetAttribLocation(GLuint program, const GLchar* name)
-{
- EVENT("(GLuint program = %d, const GLchar* name = %s)", program, name);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- Program *programObject = GetValidProgram(context, program);
-
- if (!programObject)
- {
- return -1;
- }
-
- if (!programObject->isLinked())
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return -1;
- }
-
- return programObject->getAttributeLocation(name);
- }
-
- return -1;
-}
-
-void GL_APIENTRY GetBooleanv(GLenum pname, GLboolean* params)
-{
- EVENT("(GLenum pname = 0x%X, GLboolean* params = 0x%0.8p)", pname, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLenum nativeType;
- unsigned int numParams = 0;
- if (!ValidateStateQuery(context, pname, &nativeType, &numParams))
- {
- return;
- }
-
- if (nativeType == GL_BOOL)
- {
- context->getBooleanv(pname, params);
- }
- else
- {
- CastStateValues(context, nativeType, pname, numParams, params);
- }
- }
-}
-
-void GL_APIENTRY GetBufferParameteriv(GLenum target, GLenum pname, GLint* params)
-{
- EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", target, pname, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidBufferTarget(context, target))
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- if (!ValidBufferParameter(context, pname))
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- Buffer *buffer = context->getState().getTargetBuffer(target);
-
- if (!buffer)
- {
- // A null buffer means that "0" is bound to the requested buffer target
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- switch (pname)
- {
- case GL_BUFFER_USAGE:
- *params = static_cast<GLint>(buffer->getUsage());
- break;
- case GL_BUFFER_SIZE:
- *params = clampCast<GLint>(buffer->getSize());
- break;
- case GL_BUFFER_ACCESS_FLAGS:
- *params = buffer->getAccessFlags();
- break;
- case GL_BUFFER_ACCESS_OES:
- *params = buffer->getAccess();
- break;
- case GL_BUFFER_MAPPED:
- static_assert(GL_BUFFER_MAPPED == GL_BUFFER_MAPPED_OES, "GL enums should be equal.");
- *params = static_cast<GLint>(buffer->isMapped());
- break;
- case GL_BUFFER_MAP_OFFSET:
- *params = clampCast<GLint>(buffer->getMapOffset());
- break;
- case GL_BUFFER_MAP_LENGTH:
- *params = clampCast<GLint>(buffer->getMapLength());
- break;
- default: UNREACHABLE(); break;
- }
- }
-}
-
-GLenum GL_APIENTRY GetError(void)
-{
- EVENT("()");
-
- Context *context = GetGlobalContext();
-
- if (context)
- {
- return context->getError();
- }
-
- return GL_NO_ERROR;
-}
-
-void GL_APIENTRY GetFloatv(GLenum pname, GLfloat* params)
-{
- EVENT("(GLenum pname = 0x%X, GLfloat* params = 0x%0.8p)", pname, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLenum nativeType;
- unsigned int numParams = 0;
- if (!ValidateStateQuery(context, pname, &nativeType, &numParams))
- {
- return;
- }
-
- if (nativeType == GL_FLOAT)
- {
- context->getFloatv(pname, params);
- }
- else
- {
- CastStateValues(context, nativeType, pname, numParams, params);
- }
- }
-}
-
-void GL_APIENTRY GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params)
-{
- EVENT("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)",
- target, attachment, pname, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidFramebufferTarget(target))
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- int clientVersion = context->getClientVersion();
-
- switch (pname)
- {
- case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
- case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:
- case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:
- case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:
- if (clientVersion < 3 && !context->getExtensions().sRGB)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE:
- case GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:
- case GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:
- case GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:
- case GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:
- case GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:
- case GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:
- case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:
- if (clientVersion < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- // Determine if the attachment is a valid enum
- switch (attachment)
- {
- case GL_BACK:
- case GL_FRONT:
- case GL_DEPTH:
- case GL_STENCIL:
- case GL_DEPTH_STENCIL_ATTACHMENT:
- if (clientVersion < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- break;
-
- case GL_DEPTH_ATTACHMENT:
- case GL_STENCIL_ATTACHMENT:
- break;
-
- default:
- if (attachment < GL_COLOR_ATTACHMENT0_EXT ||
- (attachment - GL_COLOR_ATTACHMENT0_EXT) >= context->getCaps().maxColorAttachments)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- break;
- }
-
- const Framebuffer *framebuffer = context->getState().getTargetFramebuffer(target);
- ASSERT(framebuffer);
-
- if (framebuffer->id() == 0)
- {
- if (clientVersion < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- switch (attachment)
- {
- case GL_BACK:
- case GL_DEPTH:
- case GL_STENCIL:
- break;
-
- default:
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
- }
- else
- {
- if (attachment >= GL_COLOR_ATTACHMENT0_EXT && attachment <= GL_COLOR_ATTACHMENT15_EXT)
- {
- // Valid attachment query
- }
- else
- {
- switch (attachment)
- {
- case GL_DEPTH_ATTACHMENT:
- case GL_STENCIL_ATTACHMENT:
- break;
-
- case GL_DEPTH_STENCIL_ATTACHMENT:
- if (framebuffer->hasValidDepthStencil())
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
- break;
-
- default:
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
- }
- }
-
- const FramebufferAttachment *attachmentObject = framebuffer->getAttachment(attachment);
- if (attachmentObject)
- {
- ASSERT(attachmentObject->type() == GL_RENDERBUFFER ||
- attachmentObject->type() == GL_TEXTURE ||
- attachmentObject->type() == GL_FRAMEBUFFER_DEFAULT);
-
- switch (pname)
- {
- case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
- *params = attachmentObject->type();
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:
- if (attachmentObject->type() != GL_RENDERBUFFER && attachmentObject->type() != GL_TEXTURE)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- *params = attachmentObject->id();
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:
- if (attachmentObject->type() != GL_TEXTURE)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- *params = attachmentObject->mipLevel();
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:
- if (attachmentObject->type() != GL_TEXTURE)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- *params = attachmentObject->cubeMapFace();
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE:
- *params = attachmentObject->getRedSize();
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:
- *params = attachmentObject->getGreenSize();
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:
- *params = attachmentObject->getBlueSize();
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:
- *params = attachmentObject->getAlphaSize();
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:
- *params = attachmentObject->getDepthSize();
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:
- *params = attachmentObject->getStencilSize();
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:
- if (attachment == GL_DEPTH_STENCIL_ATTACHMENT)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
- *params = attachmentObject->getComponentType();
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:
- *params = attachmentObject->getColorEncoding();
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:
- if (attachmentObject->type() != GL_TEXTURE)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- *params = attachmentObject->layer();
- break;
-
- default:
- UNREACHABLE();
- break;
- }
- }
- else
- {
- // ES 2.0.25 spec pg 127 states that if the value of FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE
- // is NONE, then querying any other pname will generate INVALID_ENUM.
-
- // ES 3.0.2 spec pg 235 states that if the attachment type is none,
- // GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME will return zero and be an
- // INVALID_OPERATION for all other pnames
-
- switch (pname)
- {
- case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
- *params = GL_NONE;
- break;
-
- case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:
- if (clientVersion < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- *params = 0;
- break;
-
- default:
- if (clientVersion < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- else
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
- }
- }
- }
-}
-
-void GL_APIENTRY GetIntegerv(GLenum pname, GLint* params)
-{
- EVENT("(GLenum pname = 0x%X, GLint* params = 0x%0.8p)", pname, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- GLenum nativeType;
- unsigned int numParams = 0;
-
- if (!ValidateStateQuery(context, pname, &nativeType, &numParams))
- {
- return;
- }
-
- if (nativeType == GL_INT)
- {
- context->getIntegerv(pname, params);
- }
- else
- {
- CastStateValues(context, nativeType, pname, numParams, params);
- }
- }
-}
-
-void GL_APIENTRY GetProgramiv(GLuint program, GLenum pname, GLint* params)
-{
- EVENT("(GLuint program = %d, GLenum pname = %d, GLint* params = 0x%0.8p)", program, pname, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- Program *programObject = GetValidProgram(context, program);
-
- if (!programObject)
- {
- return;
- }
-
- if (context->getClientVersion() < 3)
- {
- switch (pname)
- {
- case GL_ACTIVE_UNIFORM_BLOCKS:
- case GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH:
- case GL_TRANSFORM_FEEDBACK_BUFFER_MODE:
- case GL_TRANSFORM_FEEDBACK_VARYINGS:
- case GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH:
- case GL_PROGRAM_BINARY_RETRIEVABLE_HINT:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- }
-
- switch (pname)
- {
- case GL_DELETE_STATUS:
- *params = programObject->isFlaggedForDeletion();
- return;
- case GL_LINK_STATUS:
- *params = programObject->isLinked();
- return;
- case GL_VALIDATE_STATUS:
- *params = programObject->isValidated();
- return;
- case GL_INFO_LOG_LENGTH:
- *params = programObject->getInfoLogLength();
- return;
- case GL_ATTACHED_SHADERS:
- *params = programObject->getAttachedShadersCount();
- return;
- case GL_ACTIVE_ATTRIBUTES:
- *params = programObject->getActiveAttributeCount();
- return;
- case GL_ACTIVE_ATTRIBUTE_MAX_LENGTH:
- *params = programObject->getActiveAttributeMaxLength();
- return;
- case GL_ACTIVE_UNIFORMS:
- *params = programObject->getActiveUniformCount();
- return;
- case GL_ACTIVE_UNIFORM_MAX_LENGTH:
- *params = programObject->getActiveUniformMaxLength();
- return;
- case GL_PROGRAM_BINARY_LENGTH_OES:
- *params = programObject->getBinaryLength();
- return;
- case GL_ACTIVE_UNIFORM_BLOCKS:
- *params = programObject->getActiveUniformBlockCount();
- return;
- case GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH:
- *params = programObject->getActiveUniformBlockMaxLength();
- break;
- case GL_TRANSFORM_FEEDBACK_BUFFER_MODE:
- *params = programObject->getTransformFeedbackBufferMode();
- break;
- case GL_TRANSFORM_FEEDBACK_VARYINGS:
- *params = programObject->getTransformFeedbackVaryingCount();
- break;
- case GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH:
- *params = programObject->getTransformFeedbackVaryingMaxLength();
- break;
- case GL_PROGRAM_BINARY_RETRIEVABLE_HINT:
- *params = programObject->getBinaryRetrievableHint();
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- }
-}
-
-void GL_APIENTRY GetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog)
-{
- EVENT("(GLuint program = %d, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, GLchar* infolog = 0x%0.8p)",
- program, bufsize, length, infolog);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (bufsize < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- Program *programObject = GetValidProgram(context, program);
- if (!programObject)
- {
- return;
- }
-
- programObject->getInfoLog(bufsize, length, infolog);
- }
-}
-
-void GL_APIENTRY GetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params)
-{
- EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", target, pname, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (target != GL_RENDERBUFFER)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- if (context->getState().getRenderbufferId() == 0)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- Renderbuffer *renderbuffer = context->getRenderbuffer(context->getState().getRenderbufferId());
-
- switch (pname)
- {
- case GL_RENDERBUFFER_WIDTH: *params = renderbuffer->getWidth(); break;
- case GL_RENDERBUFFER_HEIGHT: *params = renderbuffer->getHeight(); break;
- case GL_RENDERBUFFER_INTERNAL_FORMAT: *params = renderbuffer->getInternalFormat(); break;
- case GL_RENDERBUFFER_RED_SIZE: *params = renderbuffer->getRedSize(); break;
- case GL_RENDERBUFFER_GREEN_SIZE: *params = renderbuffer->getGreenSize(); break;
- case GL_RENDERBUFFER_BLUE_SIZE: *params = renderbuffer->getBlueSize(); break;
- case GL_RENDERBUFFER_ALPHA_SIZE: *params = renderbuffer->getAlphaSize(); break;
- case GL_RENDERBUFFER_DEPTH_SIZE: *params = renderbuffer->getDepthSize(); break;
- case GL_RENDERBUFFER_STENCIL_SIZE: *params = renderbuffer->getStencilSize(); break;
-
- case GL_RENDERBUFFER_SAMPLES_ANGLE:
- if (!context->getExtensions().framebufferMultisample)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- *params = renderbuffer->getSamples();
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- }
-}
-
-void GL_APIENTRY GetShaderiv(GLuint shader, GLenum pname, GLint* params)
-{
- EVENT("(GLuint shader = %d, GLenum pname = %d, GLint* params = 0x%0.8p)", shader, pname, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- Shader *shaderObject = GetValidShader(context, shader);
- if (!shaderObject)
- {
- return;
- }
-
- switch (pname)
- {
- case GL_SHADER_TYPE:
- *params = shaderObject->getType();
- return;
- case GL_DELETE_STATUS:
- *params = shaderObject->isFlaggedForDeletion();
- return;
- case GL_COMPILE_STATUS:
- *params = shaderObject->isCompiled() ? GL_TRUE : GL_FALSE;
- return;
- case GL_INFO_LOG_LENGTH:
- *params = shaderObject->getInfoLogLength();
- return;
- case GL_SHADER_SOURCE_LENGTH:
- *params = shaderObject->getSourceLength();
- return;
- case GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE:
- *params = shaderObject->getTranslatedSourceWithDebugInfoLength();
- return;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- }
-}
-
-void GL_APIENTRY GetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog)
-{
- EVENT("(GLuint shader = %d, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, GLchar* infolog = 0x%0.8p)",
- shader, bufsize, length, infolog);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (bufsize < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- Shader *shaderObject = GetValidShader(context, shader);
- if (!shaderObject)
- {
- return;
- }
-
- shaderObject->getInfoLog(bufsize, length, infolog);
- }
-}
-
-void GL_APIENTRY GetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
-{
- EVENT("(GLenum shadertype = 0x%X, GLenum precisiontype = 0x%X, GLint* range = 0x%0.8p, GLint* precision = 0x%0.8p)",
- shadertype, precisiontype, range, precision);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- switch (shadertype)
- {
- case GL_VERTEX_SHADER:
- switch (precisiontype)
- {
- case GL_LOW_FLOAT:
- context->getCaps().vertexLowpFloat.get(range, precision);
- break;
- case GL_MEDIUM_FLOAT:
- context->getCaps().vertexMediumpFloat.get(range, precision);
- break;
- case GL_HIGH_FLOAT:
- context->getCaps().vertexHighpFloat.get(range, precision);
- break;
-
- case GL_LOW_INT:
- context->getCaps().vertexLowpInt.get(range, precision);
- break;
- case GL_MEDIUM_INT:
- context->getCaps().vertexMediumpInt.get(range, precision);
- break;
- case GL_HIGH_INT:
- context->getCaps().vertexHighpInt.get(range, precision);
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- break;
- case GL_FRAGMENT_SHADER:
- switch (precisiontype)
- {
- case GL_LOW_FLOAT:
- context->getCaps().fragmentLowpFloat.get(range, precision);
- break;
- case GL_MEDIUM_FLOAT:
- context->getCaps().fragmentMediumpFloat.get(range, precision);
- break;
- case GL_HIGH_FLOAT:
- context->getCaps().fragmentHighpFloat.get(range, precision);
- break;
-
- case GL_LOW_INT:
- context->getCaps().fragmentLowpInt.get(range, precision);
- break;
- case GL_MEDIUM_INT:
- context->getCaps().fragmentMediumpInt.get(range, precision);
- break;
- case GL_HIGH_INT:
- context->getCaps().fragmentHighpInt.get(range, precision);
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- break;
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- }
-}
-
-void GL_APIENTRY GetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source)
-{
- EVENT("(GLuint shader = %d, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, GLchar* source = 0x%0.8p)",
- shader, bufsize, length, source);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (bufsize < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- Shader *shaderObject = GetValidShader(context, shader);
- if (!shaderObject)
- {
- return;
- }
-
- shaderObject->getSource(bufsize, length, source);
- }
-}
-
-const GLubyte *GL_APIENTRY GetString(GLenum name)
-{
- EVENT("(GLenum name = 0x%X)", name);
-
- Context *context = GetValidGlobalContext();
-
- if (context)
- {
- switch (name)
- {
- case GL_VENDOR:
- return reinterpret_cast<const GLubyte *>("Google Inc.");
-
- case GL_RENDERER:
- return reinterpret_cast<const GLubyte *>(context->getRendererString().c_str());
-
- case GL_VERSION:
- if (context->getClientVersion() == 2)
- {
- return reinterpret_cast<const GLubyte *>(
- "OpenGL ES 2.0 (ANGLE " ANGLE_VERSION_STRING ")");
- }
- else
- {
- return reinterpret_cast<const GLubyte *>(
- "OpenGL ES 3.0 (ANGLE " ANGLE_VERSION_STRING ")");
- }
-
- case GL_SHADING_LANGUAGE_VERSION:
- if (context->getClientVersion() == 2)
- {
- return reinterpret_cast<const GLubyte *>(
- "OpenGL ES GLSL ES 1.00 (ANGLE " ANGLE_VERSION_STRING ")");
- }
- else
- {
- return reinterpret_cast<const GLubyte *>(
- "OpenGL ES GLSL ES 3.00 (ANGLE " ANGLE_VERSION_STRING ")");
- }
-
- case GL_EXTENSIONS:
- return reinterpret_cast<const GLubyte *>(context->getExtensionString().c_str());
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return nullptr;
- }
- }
-
- return nullptr;
-}
-
-void GL_APIENTRY GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)
-{
- EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLfloat* params = 0x%0.8p)", target, pname, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidTextureTarget(context, target))
- {
- context->recordError(Error(GL_INVALID_ENUM, "Invalid texture target"));
- return;
- }
-
- Texture *texture = context->getTargetTexture(target);
-
- if (!texture)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- switch (pname)
- {
- case GL_TEXTURE_MAG_FILTER:
- *params = (GLfloat)texture->getMagFilter();
- break;
- case GL_TEXTURE_MIN_FILTER:
- *params = (GLfloat)texture->getMinFilter();
- break;
- case GL_TEXTURE_WRAP_S:
- *params = (GLfloat)texture->getWrapS();
- break;
- case GL_TEXTURE_WRAP_T:
- *params = (GLfloat)texture->getWrapT();
- break;
- case GL_TEXTURE_WRAP_R:
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- *params = (GLfloat)texture->getWrapR();
- break;
- case GL_TEXTURE_IMMUTABLE_FORMAT:
- // Exposed to ES2.0 through EXT_texture_storage, no client version validation.
- *params = (GLfloat)(texture->getImmutableFormat() ? GL_TRUE : GL_FALSE);
- break;
- case GL_TEXTURE_IMMUTABLE_LEVELS:
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- *params = (GLfloat)texture->getImmutableLevels();
- break;
- case GL_TEXTURE_USAGE_ANGLE:
- *params = (GLfloat)texture->getUsage();
- break;
- case GL_TEXTURE_MAX_ANISOTROPY_EXT:
- if (!context->getExtensions().textureFilterAnisotropic)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- *params = (GLfloat)texture->getMaxAnisotropy();
- break;
- case GL_TEXTURE_SWIZZLE_R:
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- *params = (GLfloat)texture->getSwizzleRed();
- break;
- case GL_TEXTURE_SWIZZLE_G:
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- *params = (GLfloat)texture->getSwizzleGreen();
- break;
- case GL_TEXTURE_SWIZZLE_B:
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- *params = (GLfloat)texture->getSwizzleBlue();
- break;
- case GL_TEXTURE_SWIZZLE_A:
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- *params = (GLfloat)texture->getSwizzleAlpha();
- break;
- case GL_TEXTURE_BASE_LEVEL:
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- *params = (GLfloat)texture->getBaseLevel();
- break;
- case GL_TEXTURE_MAX_LEVEL:
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- *params = (GLfloat)texture->getMaxLevel();
- break;
- case GL_TEXTURE_MIN_LOD:
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- *params = texture->getSamplerState().minLod;
- break;
- case GL_TEXTURE_MAX_LOD:
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- *params = texture->getSamplerState().maxLod;
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- }
-}
-
-void GL_APIENTRY GetTexParameteriv(GLenum target, GLenum pname, GLint* params)
-{
- EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", target, pname, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidTextureTarget(context, target))
- {
- context->recordError(Error(GL_INVALID_ENUM, "Invalid texture target"));
- return;
- }
-
- Texture *texture = context->getTargetTexture(target);
-
- if (!texture)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- switch (pname)
- {
- case GL_TEXTURE_MAG_FILTER:
- *params = texture->getSamplerState().magFilter;
- break;
- case GL_TEXTURE_MIN_FILTER:
- *params = texture->getSamplerState().minFilter;
- break;
- case GL_TEXTURE_WRAP_S:
- *params = texture->getSamplerState().wrapS;
- break;
- case GL_TEXTURE_WRAP_T:
- *params = texture->getSamplerState().wrapT;
- break;
- case GL_TEXTURE_WRAP_R:
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- *params = texture->getSamplerState().wrapR;
- break;
- case GL_TEXTURE_IMMUTABLE_FORMAT:
- // Exposed to ES2.0 through EXT_texture_storage, no client version validation.
- *params = texture->getImmutableFormat() ? GL_TRUE : GL_FALSE;
- break;
- case GL_TEXTURE_IMMUTABLE_LEVELS:
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- *params = static_cast<GLint>(texture->getImmutableLevels());
- break;
- case GL_TEXTURE_USAGE_ANGLE:
- *params = texture->getUsage();
- break;
- case GL_TEXTURE_MAX_ANISOTROPY_EXT:
- if (!context->getExtensions().textureFilterAnisotropic)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- *params = (GLint)texture->getMaxAnisotropy();
- break;
- case GL_TEXTURE_SWIZZLE_R:
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- *params = texture->getSwizzleRed();
- break;
- case GL_TEXTURE_SWIZZLE_G:
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- *params = texture->getSwizzleGreen();
- break;
- case GL_TEXTURE_SWIZZLE_B:
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- *params = texture->getSwizzleBlue();
- break;
- case GL_TEXTURE_SWIZZLE_A:
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- *params = texture->getSwizzleAlpha();
- break;
- case GL_TEXTURE_BASE_LEVEL:
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- *params = texture->getBaseLevel();
- break;
- case GL_TEXTURE_MAX_LEVEL:
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- *params = texture->getMaxLevel();
- break;
- case GL_TEXTURE_MIN_LOD:
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- *params = (GLint)texture->getMinLod();
- break;
- case GL_TEXTURE_MAX_LOD:
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- *params = (GLint)texture->getMaxLod();
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- }
-}
-
-void GL_APIENTRY GetUniformfv(GLuint program, GLint location, GLfloat* params)
-{
- EVENT("(GLuint program = %d, GLint location = %d, GLfloat* params = 0x%0.8p)", program, location, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateGetUniformfv(context, program, location, params))
- {
- return;
- }
-
- Program *programObject = context->getProgram(program);
- ASSERT(programObject);
-
- programObject->getUniformfv(location, params);
- }
-}
-
-void GL_APIENTRY GetUniformiv(GLuint program, GLint location, GLint* params)
-{
- EVENT("(GLuint program = %d, GLint location = %d, GLint* params = 0x%0.8p)", program, location, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateGetUniformiv(context, program, location, params))
- {
- return;
- }
-
- Program *programObject = context->getProgram(program);
- ASSERT(programObject);
-
- programObject->getUniformiv(location, params);
- }
-}
-
-GLint GL_APIENTRY GetUniformLocation(GLuint program, const GLchar* name)
-{
- EVENT("(GLuint program = %d, const GLchar* name = 0x%0.8p)", program, name);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (strstr(name, "gl_") == name)
- {
- return -1;
- }
-
- Program *programObject = GetValidProgram(context, program);
-
- if (!programObject)
- {
- return -1;
- }
-
- if (!programObject->isLinked())
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return -1;
- }
-
- return programObject->getUniformLocation(name);
- }
-
- return -1;
-}
-
-void GL_APIENTRY GetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params)
-{
- EVENT("(GLuint index = %d, GLenum pname = 0x%X, GLfloat* params = 0x%0.8p)", index, pname, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (index >= MAX_VERTEX_ATTRIBS)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- if (!ValidateGetVertexAttribParameters(context, pname))
- {
- return;
- }
-
- if (pname == GL_CURRENT_VERTEX_ATTRIB)
- {
- const VertexAttribCurrentValueData &currentValueData = context->getState().getVertexAttribCurrentValue(index);
- for (int i = 0; i < 4; ++i)
- {
- params[i] = currentValueData.FloatValues[i];
- }
- }
- else
- {
- const VertexAttribute &attribState = context->getState().getVertexArray()->getVertexAttribute(index);
- *params = QuerySingleVertexAttributeParameter<GLfloat>(attribState, pname);
- }
- }
-}
-
-void GL_APIENTRY GetVertexAttribiv(GLuint index, GLenum pname, GLint* params)
-{
- EVENT("(GLuint index = %d, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", index, pname, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (index >= MAX_VERTEX_ATTRIBS)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- if (!ValidateGetVertexAttribParameters(context, pname))
- {
- return;
- }
-
- if (pname == GL_CURRENT_VERTEX_ATTRIB)
- {
- const VertexAttribCurrentValueData &currentValueData = context->getState().getVertexAttribCurrentValue(index);
- for (int i = 0; i < 4; ++i)
- {
- float currentValue = currentValueData.FloatValues[i];
- params[i] = iround<GLint>(currentValue);
- }
- }
- else
- {
- const VertexAttribute &attribState = context->getState().getVertexArray()->getVertexAttribute(index);
- *params = QuerySingleVertexAttributeParameter<GLint>(attribState, pname);
- }
- }
-}
-
-void GL_APIENTRY GetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid** pointer)
-{
- EVENT("(GLuint index = %d, GLenum pname = 0x%X, GLvoid** pointer = 0x%0.8p)", index, pname, pointer);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (index >= MAX_VERTEX_ATTRIBS)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- if (pname != GL_VERTEX_ATTRIB_ARRAY_POINTER)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- *pointer = const_cast<GLvoid*>(context->getState().getVertexAttribPointer(index));
- }
-}
-
-void GL_APIENTRY Hint(GLenum target, GLenum mode)
-{
- EVENT("(GLenum target = 0x%X, GLenum mode = 0x%X)", target, mode);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- switch (mode)
- {
- case GL_FASTEST:
- case GL_NICEST:
- case GL_DONT_CARE:
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- switch (target)
- {
- case GL_GENERATE_MIPMAP_HINT:
- context->getState().setGenerateMipmapHint(mode);
- break;
-
- case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES:
- context->getState().setFragmentShaderDerivativeHint(mode);
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- }
-}
-
-GLboolean GL_APIENTRY IsBuffer(GLuint buffer)
-{
- EVENT("(GLuint buffer = %d)", buffer);
-
- Context *context = GetValidGlobalContext();
- if (context && buffer)
- {
- Buffer *bufferObject = context->getBuffer(buffer);
-
- if (bufferObject)
- {
- return GL_TRUE;
- }
- }
-
- return GL_FALSE;
-}
-
-GLboolean GL_APIENTRY IsEnabled(GLenum cap)
-{
- EVENT("(GLenum cap = 0x%X)", cap);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidCap(context, cap))
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return GL_FALSE;
- }
-
- return context->getState().getEnableFeature(cap);
- }
-
- return false;
-}
-
-GLboolean GL_APIENTRY IsFramebuffer(GLuint framebuffer)
-{
- EVENT("(GLuint framebuffer = %d)", framebuffer);
-
- Context *context = GetValidGlobalContext();
- if (context && framebuffer)
- {
- Framebuffer *framebufferObject = context->getFramebuffer(framebuffer);
-
- if (framebufferObject)
- {
- return GL_TRUE;
- }
- }
-
- return GL_FALSE;
-}
-
-GLboolean GL_APIENTRY IsProgram(GLuint program)
-{
- EVENT("(GLuint program = %d)", program);
-
- Context *context = GetValidGlobalContext();
- if (context && program)
- {
- Program *programObject = context->getProgram(program);
-
- if (programObject)
- {
- return GL_TRUE;
- }
- }
-
- return GL_FALSE;
-}
-
-GLboolean GL_APIENTRY IsRenderbuffer(GLuint renderbuffer)
-{
- EVENT("(GLuint renderbuffer = %d)", renderbuffer);
-
- Context *context = GetValidGlobalContext();
- if (context && renderbuffer)
- {
- Renderbuffer *renderbufferObject = context->getRenderbuffer(renderbuffer);
-
- if (renderbufferObject)
- {
- return GL_TRUE;
- }
- }
-
- return GL_FALSE;
-}
-
-GLboolean GL_APIENTRY IsShader(GLuint shader)
-{
- EVENT("(GLuint shader = %d)", shader);
-
- Context *context = GetValidGlobalContext();
- if (context && shader)
- {
- Shader *shaderObject = context->getShader(shader);
-
- if (shaderObject)
- {
- return GL_TRUE;
- }
- }
-
- return GL_FALSE;
-}
-
-GLboolean GL_APIENTRY IsTexture(GLuint texture)
-{
- EVENT("(GLuint texture = %d)", texture);
-
- Context *context = GetValidGlobalContext();
- if (context && texture)
- {
- Texture *textureObject = context->getTexture(texture);
-
- if (textureObject)
- {
- return GL_TRUE;
- }
- }
-
- return GL_FALSE;
-}
-
-void GL_APIENTRY LineWidth(GLfloat width)
-{
- EVENT("(GLfloat width = %f)", width);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (width <= 0.0f)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- context->getState().setLineWidth(width);
- }
-}
-
-void GL_APIENTRY LinkProgram(GLuint program)
-{
- EVENT("(GLuint program = %d)", program);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- Program *programObject = GetValidProgram(context, program);
- if (!programObject)
- {
- return;
- }
-
- Error error = programObject->link(context->getData());
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
-}
-
-void GL_APIENTRY PixelStorei(GLenum pname, GLint param)
-{
- EVENT("(GLenum pname = 0x%X, GLint param = %d)", pname, param);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- switch (pname)
- {
- case GL_UNPACK_IMAGE_HEIGHT:
- case GL_UNPACK_SKIP_IMAGES:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
-
- case GL_UNPACK_ROW_LENGTH:
- case GL_UNPACK_SKIP_ROWS:
- case GL_UNPACK_SKIP_PIXELS:
- if (!context->getExtensions().unpackSubimage)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- break;
-
- case GL_PACK_ROW_LENGTH:
- case GL_PACK_SKIP_ROWS:
- case GL_PACK_SKIP_PIXELS:
- if (!context->getExtensions().packSubimage)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- break;
- }
- }
-
- if (param < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE, "Cannot use negative values in PixelStorei"));
- return;
- }
-
- State &state = context->getState();
-
- switch (pname)
- {
- case GL_UNPACK_ALIGNMENT:
- if (param != 1 && param != 2 && param != 4 && param != 8)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- state.setUnpackAlignment(param);
- break;
-
- case GL_PACK_ALIGNMENT:
- if (param != 1 && param != 2 && param != 4 && param != 8)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- state.setPackAlignment(param);
- break;
-
- case GL_PACK_REVERSE_ROW_ORDER_ANGLE:
- state.setPackReverseRowOrder(param != 0);
- break;
-
- case GL_UNPACK_ROW_LENGTH:
- ASSERT((context->getClientVersion() >= 3) || context->getExtensions().unpackSubimage);
- state.setUnpackRowLength(param);
- break;
-
- case GL_UNPACK_IMAGE_HEIGHT:
- ASSERT(context->getClientVersion() >= 3);
- state.setUnpackImageHeight(param);
- break;
-
- case GL_UNPACK_SKIP_IMAGES:
- ASSERT(context->getClientVersion() >= 3);
- state.setUnpackSkipImages(param);
- break;
-
- case GL_UNPACK_SKIP_ROWS:
- ASSERT((context->getClientVersion() >= 3) || context->getExtensions().unpackSubimage);
- state.setUnpackSkipRows(param);
- break;
-
- case GL_UNPACK_SKIP_PIXELS:
- ASSERT((context->getClientVersion() >= 3) || context->getExtensions().unpackSubimage);
- state.setUnpackSkipPixels(param);
- break;
-
- case GL_PACK_ROW_LENGTH:
- ASSERT((context->getClientVersion() >= 3) || context->getExtensions().packSubimage);
- state.setPackRowLength(param);
- break;
-
- case GL_PACK_SKIP_ROWS:
- ASSERT((context->getClientVersion() >= 3) || context->getExtensions().packSubimage);
- state.setPackSkipRows(param);
- break;
-
- case GL_PACK_SKIP_PIXELS:
- ASSERT((context->getClientVersion() >= 3) || context->getExtensions().packSubimage);
- state.setPackSkipPixels(param);
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- }
-}
-
-void GL_APIENTRY PolygonOffset(GLfloat factor, GLfloat units)
-{
- EVENT("(GLfloat factor = %f, GLfloat units = %f)", factor, units);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- context->getState().setPolygonOffsetParams(factor, units);
- }
-}
-
-void GL_APIENTRY ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height,
- GLenum format, GLenum type, GLvoid* pixels)
-{
- EVENT("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, "
- "GLenum format = 0x%X, GLenum type = 0x%X, GLvoid* pixels = 0x%0.8p)",
- x, y, width, height, format, type, pixels);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!context->skipValidation() &&
- !ValidateReadPixels(context, x, y, width, height, format, type, pixels))
- {
- return;
- }
-
- context->readPixels(x, y, width, height, format, type, pixels);
- }
-}
-
-void GL_APIENTRY ReleaseShaderCompiler(void)
-{
- EVENT("()");
-
- Context *context = GetValidGlobalContext();
-
- if (context)
- {
- Compiler *compiler = context->getCompiler();
- Error error = compiler->release();
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
-}
-
-void GL_APIENTRY RenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
-{
- EVENT("(GLenum target = 0x%X, GLenum internalformat = 0x%X, GLsizei width = %d, GLsizei height = %d)",
- target, internalformat, width, height);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateRenderbufferStorageParametersANGLE(context, target, 0, internalformat,
- width, height))
- {
- return;
- }
-
- Renderbuffer *renderbuffer = context->getState().getCurrentRenderbuffer();
- Error error = renderbuffer->setStorage(internalformat, width, height);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
-}
-
-void GL_APIENTRY SampleCoverage(GLclampf value, GLboolean invert)
-{
- EVENT("(GLclampf value = %f, GLboolean invert = %u)", value, invert);
-
- Context* context = GetValidGlobalContext();
-
- if (context)
- {
- context->getState().setSampleCoverageParams(clamp01(value), invert == GL_TRUE);
- }
-}
-
-void GL_APIENTRY Scissor(GLint x, GLint y, GLsizei width, GLsizei height)
-{
- EVENT("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)", x, y, width, height);
-
- Context* context = GetValidGlobalContext();
- if (context)
- {
- if (width < 0 || height < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- context->getState().setScissorParams(x, y, width, height);
- }
-}
-
-void GL_APIENTRY ShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length)
-{
- EVENT("(GLsizei n = %d, const GLuint* shaders = 0x%0.8p, GLenum binaryformat = 0x%X, "
- "const GLvoid* binary = 0x%0.8p, GLsizei length = %d)",
- n, shaders, binaryformat, binary, length);
-
- Context* context = GetValidGlobalContext();
- if (context)
- {
- const std::vector<GLenum> &shaderBinaryFormats = context->getCaps().shaderBinaryFormats;
- if (std::find(shaderBinaryFormats.begin(), shaderBinaryFormats.end(), binaryformat) == shaderBinaryFormats.end())
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- // No binary shader formats are supported.
- UNIMPLEMENTED();
- }
-}
-
-void GL_APIENTRY ShaderSource(GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length)
-{
- EVENT("(GLuint shader = %d, GLsizei count = %d, const GLchar** string = 0x%0.8p, const GLint* length = 0x%0.8p)",
- shader, count, string, length);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (count < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- Shader *shaderObject = GetValidShader(context, shader);
- if (!shaderObject)
- {
- return;
- }
- shaderObject->setSource(count, string, length);
- }
-}
-
-void GL_APIENTRY StencilFunc(GLenum func, GLint ref, GLuint mask)
-{
- StencilFuncSeparate(GL_FRONT_AND_BACK, func, ref, mask);
-}
-
-void GL_APIENTRY StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
-{
- EVENT("(GLenum face = 0x%X, GLenum func = 0x%X, GLint ref = %d, GLuint mask = %d)", face, func, ref, mask);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- switch (face)
- {
- case GL_FRONT:
- case GL_BACK:
- case GL_FRONT_AND_BACK:
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- switch (func)
- {
- case GL_NEVER:
- case GL_ALWAYS:
- case GL_LESS:
- case GL_LEQUAL:
- case GL_EQUAL:
- case GL_GEQUAL:
- case GL_GREATER:
- case GL_NOTEQUAL:
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- if (face == GL_FRONT || face == GL_FRONT_AND_BACK)
- {
- context->getState().setStencilParams(func, ref, mask);
- }
-
- if (face == GL_BACK || face == GL_FRONT_AND_BACK)
- {
- context->getState().setStencilBackParams(func, ref, mask);
- }
- }
-}
-
-void GL_APIENTRY StencilMask(GLuint mask)
-{
- StencilMaskSeparate(GL_FRONT_AND_BACK, mask);
-}
-
-void GL_APIENTRY StencilMaskSeparate(GLenum face, GLuint mask)
-{
- EVENT("(GLenum face = 0x%X, GLuint mask = %d)", face, mask);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- switch (face)
- {
- case GL_FRONT:
- case GL_BACK:
- case GL_FRONT_AND_BACK:
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- if (face == GL_FRONT || face == GL_FRONT_AND_BACK)
- {
- context->getState().setStencilWritemask(mask);
- }
-
- if (face == GL_BACK || face == GL_FRONT_AND_BACK)
- {
- context->getState().setStencilBackWritemask(mask);
- }
- }
-}
-
-void GL_APIENTRY StencilOp(GLenum fail, GLenum zfail, GLenum zpass)
-{
- StencilOpSeparate(GL_FRONT_AND_BACK, fail, zfail, zpass);
-}
-
-void GL_APIENTRY StencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
-{
- EVENT("(GLenum face = 0x%X, GLenum fail = 0x%X, GLenum zfail = 0x%X, GLenum zpas = 0x%Xs)",
- face, fail, zfail, zpass);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- switch (face)
- {
- case GL_FRONT:
- case GL_BACK:
- case GL_FRONT_AND_BACK:
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- switch (fail)
- {
- case GL_ZERO:
- case GL_KEEP:
- case GL_REPLACE:
- case GL_INCR:
- case GL_DECR:
- case GL_INVERT:
- case GL_INCR_WRAP:
- case GL_DECR_WRAP:
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- switch (zfail)
- {
- case GL_ZERO:
- case GL_KEEP:
- case GL_REPLACE:
- case GL_INCR:
- case GL_DECR:
- case GL_INVERT:
- case GL_INCR_WRAP:
- case GL_DECR_WRAP:
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- switch (zpass)
- {
- case GL_ZERO:
- case GL_KEEP:
- case GL_REPLACE:
- case GL_INCR:
- case GL_DECR:
- case GL_INVERT:
- case GL_INCR_WRAP:
- case GL_DECR_WRAP:
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- if (face == GL_FRONT || face == GL_FRONT_AND_BACK)
- {
- context->getState().setStencilOperations(fail, zfail, zpass);
- }
-
- if (face == GL_BACK || face == GL_FRONT_AND_BACK)
- {
- context->getState().setStencilBackOperations(fail, zfail, zpass);
- }
- }
-}
-
-void GL_APIENTRY TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
- GLint border, GLenum format, GLenum type, const GLvoid* pixels)
-{
- EVENT("(GLenum target = 0x%X, GLint level = %d, GLint internalformat = %d, GLsizei width = %d, GLsizei height = %d, "
- "GLint border = %d, GLenum format = 0x%X, GLenum type = 0x%X, const GLvoid* pixels = 0x%0.8p)",
- target, level, internalformat, width, height, border, format, type, pixels);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3 &&
- !ValidateES2TexImageParameters(context, target, level, internalformat, false, false,
- 0, 0, width, height, border, format, type, pixels))
- {
- return;
- }
-
- if (context->getClientVersion() >= 3 &&
- !ValidateES3TexImage2DParameters(context, target, level, internalformat, false, false,
- 0, 0, 0, width, height, 1, border, format, type,
- pixels))
- {
- return;
- }
-
- Extents size(width, height, 1);
- Texture *texture = context->getTargetTexture(IsCubeMapTextureTarget(target) ? GL_TEXTURE_CUBE_MAP : target);
- Error error = texture->setImage(context, target, level, internalformat, size, format, type,
- reinterpret_cast<const uint8_t *>(pixels));
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
-}
-
-void GL_APIENTRY TexParameterf(GLenum target, GLenum pname, GLfloat param)
-{
- EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint param = %f)", target, pname, param);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidTextureTarget(context, target))
- {
- context->recordError(Error(GL_INVALID_ENUM, "Invalid texture target"));
- return;
- }
-
- if (!ValidateTexParamParameters(context, pname, static_cast<GLint>(param)))
- {
- return;
- }
-
- Texture *texture = context->getTargetTexture(target);
-
- if (!texture)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- // clang-format off
- switch (pname)
- {
- case GL_TEXTURE_WRAP_S: texture->setWrapS(uiround<GLenum>(param)); break;
- case GL_TEXTURE_WRAP_T: texture->setWrapT(uiround<GLenum>(param)); break;
- case GL_TEXTURE_WRAP_R: texture->setWrapR(uiround<GLenum>(param)); break;
- case GL_TEXTURE_MIN_FILTER: texture->setMinFilter(uiround<GLenum>(param)); break;
- case GL_TEXTURE_MAG_FILTER: texture->setMagFilter(uiround<GLenum>(param)); break;
- case GL_TEXTURE_USAGE_ANGLE: texture->setUsage(uiround<GLenum>(param)); break;
- case GL_TEXTURE_MAX_ANISOTROPY_EXT: texture->setMaxAnisotropy(std::min(param, context->getExtensions().maxTextureAnisotropy)); break;
- case GL_TEXTURE_COMPARE_MODE: texture->setCompareMode(uiround<GLenum>(param)); break;
- case GL_TEXTURE_COMPARE_FUNC: texture->setCompareFunc(uiround<GLenum>(param)); break;
- case GL_TEXTURE_SWIZZLE_R: texture->setSwizzleRed(uiround<GLenum>(param)); break;
- case GL_TEXTURE_SWIZZLE_G: texture->setSwizzleGreen(uiround<GLenum>(param)); break;
- case GL_TEXTURE_SWIZZLE_B: texture->setSwizzleBlue(uiround<GLenum>(param)); break;
- case GL_TEXTURE_SWIZZLE_A: texture->setSwizzleAlpha(uiround<GLenum>(param)); break;
- case GL_TEXTURE_BASE_LEVEL: texture->setBaseLevel(uiround<GLuint>(param)); break;
- case GL_TEXTURE_MAX_LEVEL: texture->setMaxLevel(uiround<GLuint>(param)); break;
- case GL_TEXTURE_MIN_LOD: texture->setMinLod(param); break;
- case GL_TEXTURE_MAX_LOD: texture->setMaxLod(param); break;
- default: UNREACHABLE(); break;
- }
- // clang-format on
- }
-}
-
-void GL_APIENTRY TexParameterfv(GLenum target, GLenum pname, const GLfloat* params)
-{
- TexParameterf(target, pname, (GLfloat)*params);
-}
-
-void GL_APIENTRY TexParameteri(GLenum target, GLenum pname, GLint param)
-{
- EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint param = %d)", target, pname, param);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidTextureTarget(context, target))
- {
- context->recordError(Error(GL_INVALID_ENUM, "Invalid Texture target"));
- return;
- }
-
- if (!ValidateTexParamParameters(context, pname, param))
- {
- return;
- }
-
- Texture *texture = context->getTargetTexture(target);
-
- if (!texture)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- // clang-format off
- switch (pname)
- {
- case GL_TEXTURE_WRAP_S: texture->setWrapS(static_cast<GLenum>(param)); break;
- case GL_TEXTURE_WRAP_T: texture->setWrapT(static_cast<GLenum>(param)); break;
- case GL_TEXTURE_WRAP_R: texture->setWrapR(static_cast<GLenum>(param)); break;
- case GL_TEXTURE_MIN_FILTER: texture->setMinFilter(static_cast<GLenum>(param)); break;
- case GL_TEXTURE_MAG_FILTER: texture->setMagFilter(static_cast<GLenum>(param)); break;
- case GL_TEXTURE_USAGE_ANGLE: texture->setUsage(static_cast<GLenum>(param)); break;
- case GL_TEXTURE_MAX_ANISOTROPY_EXT: texture->setMaxAnisotropy(std::min(static_cast<GLfloat>(param), context->getExtensions().maxTextureAnisotropy)); break;
- case GL_TEXTURE_COMPARE_MODE: texture->setCompareMode(static_cast<GLenum>(param)); break;
- case GL_TEXTURE_COMPARE_FUNC: texture->setCompareFunc(static_cast<GLenum>(param)); break;
- case GL_TEXTURE_SWIZZLE_R: texture->setSwizzleRed(static_cast<GLenum>(param)); break;
- case GL_TEXTURE_SWIZZLE_G: texture->setSwizzleGreen(static_cast<GLenum>(param)); break;
- case GL_TEXTURE_SWIZZLE_B: texture->setSwizzleBlue(static_cast<GLenum>(param)); break;
- case GL_TEXTURE_SWIZZLE_A: texture->setSwizzleAlpha(static_cast<GLenum>(param)); break;
- case GL_TEXTURE_BASE_LEVEL: texture->setBaseLevel(static_cast<GLuint>(param)); break;
- case GL_TEXTURE_MAX_LEVEL: texture->setMaxLevel(static_cast<GLuint>(param)); break;
- case GL_TEXTURE_MIN_LOD: texture->setMinLod(static_cast<GLfloat>(param)); break;
- case GL_TEXTURE_MAX_LOD: texture->setMaxLod(static_cast<GLfloat>(param)); break;
- default: UNREACHABLE(); break;
- }
- // clang-format on
- }
-}
-
-void GL_APIENTRY TexParameteriv(GLenum target, GLenum pname, const GLint* params)
-{
- TexParameteri(target, pname, *params);
-}
-
-void GL_APIENTRY TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
- GLenum format, GLenum type, const GLvoid* pixels)
-{
- EVENT("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
- "GLsizei width = %d, GLsizei height = %d, GLenum format = 0x%X, GLenum type = 0x%X, "
- "const GLvoid* pixels = 0x%0.8p)",
- target, level, xoffset, yoffset, width, height, format, type, pixels);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3 &&
- !ValidateES2TexImageParameters(context, target, level, GL_NONE, false, true,
- xoffset, yoffset, width, height, 0, format, type, pixels))
- {
- return;
- }
-
- if (context->getClientVersion() >= 3 &&
- !ValidateES3TexImage2DParameters(context, target, level, GL_NONE, false, true, xoffset,
- yoffset, 0, width, height, 1, 0, format, type, pixels))
- {
- return;
- }
-
- // Zero sized uploads are valid but no-ops
- if (width == 0 || height == 0)
- {
- return;
- }
-
- Box area(xoffset, yoffset, 0, width, height, 1);
- Texture *texture = context->getTargetTexture(IsCubeMapTextureTarget(target) ? GL_TEXTURE_CUBE_MAP : target);
- Error error = texture->setSubImage(context, target, level, area, format, type,
- reinterpret_cast<const uint8_t *>(pixels));
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
-}
-
-void GL_APIENTRY Uniform1f(GLint location, GLfloat x)
-{
- Uniform1fv(location, 1, &x);
-}
-
-void GL_APIENTRY Uniform1fv(GLint location, GLsizei count, const GLfloat* v)
-{
- EVENT("(GLint location = %d, GLsizei count = %d, const GLfloat* v = 0x%0.8p)", location, count, v);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateUniform(context, GL_FLOAT, location, count))
- {
- return;
- }
-
- Program *program = context->getState().getProgram();
- program->setUniform1fv(location, count, v);
- }
-}
-
-void GL_APIENTRY Uniform1i(GLint location, GLint x)
-{
- Uniform1iv(location, 1, &x);
-}
-
-void GL_APIENTRY Uniform1iv(GLint location, GLsizei count, const GLint* v)
-{
- EVENT("(GLint location = %d, GLsizei count = %d, const GLint* v = 0x%0.8p)", location, count, v);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateUniform(context, GL_INT, location, count))
- {
- return;
- }
-
- Program *program = context->getState().getProgram();
- program->setUniform1iv(location, count, v);
- }
-}
-
-void GL_APIENTRY Uniform2f(GLint location, GLfloat x, GLfloat y)
-{
- GLfloat xy[2] = {x, y};
-
- Uniform2fv(location, 1, xy);
-}
-
-void GL_APIENTRY Uniform2fv(GLint location, GLsizei count, const GLfloat* v)
-{
- EVENT("(GLint location = %d, GLsizei count = %d, const GLfloat* v = 0x%0.8p)", location, count, v);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateUniform(context, GL_FLOAT_VEC2, location, count))
- {
- return;
- }
-
- Program *program = context->getState().getProgram();
- program->setUniform2fv(location, count, v);
- }
-}
-
-void GL_APIENTRY Uniform2i(GLint location, GLint x, GLint y)
-{
- GLint xy[2] = {x, y};
-
- Uniform2iv(location, 1, xy);
-}
-
-void GL_APIENTRY Uniform2iv(GLint location, GLsizei count, const GLint* v)
-{
- EVENT("(GLint location = %d, GLsizei count = %d, const GLint* v = 0x%0.8p)", location, count, v);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateUniform(context, GL_INT_VEC2, location, count))
- {
- return;
- }
-
- Program *program = context->getState().getProgram();
- program->setUniform2iv(location, count, v);
- }
-}
-
-void GL_APIENTRY Uniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)
-{
- GLfloat xyz[3] = {x, y, z};
-
- Uniform3fv(location, 1, xyz);
-}
-
-void GL_APIENTRY Uniform3fv(GLint location, GLsizei count, const GLfloat* v)
-{
- EVENT("(GLint location = %d, GLsizei count = %d, const GLfloat* v = 0x%0.8p)", location, count, v);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateUniform(context, GL_FLOAT_VEC3, location, count))
- {
- return;
- }
-
- Program *program = context->getState().getProgram();
- program->setUniform3fv(location, count, v);
- }
-}
-
-void GL_APIENTRY Uniform3i(GLint location, GLint x, GLint y, GLint z)
-{
- GLint xyz[3] = {x, y, z};
-
- Uniform3iv(location, 1, xyz);
-}
-
-void GL_APIENTRY Uniform3iv(GLint location, GLsizei count, const GLint* v)
-{
- EVENT("(GLint location = %d, GLsizei count = %d, const GLint* v = 0x%0.8p)", location, count, v);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateUniform(context, GL_INT_VEC3, location, count))
- {
- return;
- }
-
- Program *program = context->getState().getProgram();
- program->setUniform3iv(location, count, v);
- }
-}
-
-void GL_APIENTRY Uniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
-{
- GLfloat xyzw[4] = {x, y, z, w};
-
- Uniform4fv(location, 1, xyzw);
-}
-
-void GL_APIENTRY Uniform4fv(GLint location, GLsizei count, const GLfloat* v)
-{
- EVENT("(GLint location = %d, GLsizei count = %d, const GLfloat* v = 0x%0.8p)", location, count, v);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateUniform(context, GL_FLOAT_VEC4, location, count))
- {
- return;
- }
-
- Program *program = context->getState().getProgram();
- program->setUniform4fv(location, count, v);
- }
-}
-
-void GL_APIENTRY Uniform4i(GLint location, GLint x, GLint y, GLint z, GLint w)
-{
- GLint xyzw[4] = {x, y, z, w};
-
- Uniform4iv(location, 1, xyzw);
-}
-
-void GL_APIENTRY Uniform4iv(GLint location, GLsizei count, const GLint* v)
-{
- EVENT("(GLint location = %d, GLsizei count = %d, const GLint* v = 0x%0.8p)", location, count, v);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateUniform(context, GL_INT_VEC4, location, count))
- {
- return;
- }
-
- Program *program = context->getState().getProgram();
- program->setUniform4iv(location, count, v);
- }
-}
-
-void GL_APIENTRY UniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
-{
- EVENT("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat* value = 0x%0.8p)",
- location, count, transpose, value);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateUniformMatrix(context, GL_FLOAT_MAT2, location, count, transpose))
- {
- return;
- }
-
- Program *program = context->getState().getProgram();
- program->setUniformMatrix2fv(location, count, transpose, value);
- }
-}
-
-void GL_APIENTRY UniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
-{
- EVENT("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat* value = 0x%0.8p)",
- location, count, transpose, value);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateUniformMatrix(context, GL_FLOAT_MAT3, location, count, transpose))
- {
- return;
- }
-
- Program *program = context->getState().getProgram();
- program->setUniformMatrix3fv(location, count, transpose, value);
- }
-}
-
-void GL_APIENTRY UniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
-{
- EVENT("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat* value = 0x%0.8p)",
- location, count, transpose, value);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateUniformMatrix(context, GL_FLOAT_MAT4, location, count, transpose))
- {
- return;
- }
-
- Program *program = context->getState().getProgram();
- program->setUniformMatrix4fv(location, count, transpose, value);
- }
-}
-
-void GL_APIENTRY UseProgram(GLuint program)
-{
- EVENT("(GLuint program = %d)", program);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- Program *programObject = context->getProgram(program);
-
- if (!programObject && program != 0)
- {
- if (context->getShader(program))
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
- else
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
- }
-
- if (program != 0 && !programObject->isLinked())
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- context->useProgram(program);
- }
-}
-
-void GL_APIENTRY ValidateProgram(GLuint program)
-{
- EVENT("(GLuint program = %d)", program);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- Program *programObject = GetValidProgram(context, program);
-
- if (!programObject)
- {
- return;
- }
-
- programObject->validate(context->getCaps());
- }
-}
-
-void GL_APIENTRY VertexAttrib1f(GLuint index, GLfloat x)
-{
- EVENT("(GLuint index = %d, GLfloat x = %f)", index, x);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (index >= MAX_VERTEX_ATTRIBS)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- GLfloat vals[4] = { x, 0, 0, 1 };
- context->getState().setVertexAttribf(index, vals);
- }
-}
-
-void GL_APIENTRY VertexAttrib1fv(GLuint index, const GLfloat* values)
-{
- EVENT("(GLuint index = %d, const GLfloat* values = 0x%0.8p)", index, values);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (index >= MAX_VERTEX_ATTRIBS)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- GLfloat vals[4] = { values[0], 0, 0, 1 };
- context->getState().setVertexAttribf(index, vals);
- }
-}
-
-void GL_APIENTRY VertexAttrib2f(GLuint index, GLfloat x, GLfloat y)
-{
- EVENT("(GLuint index = %d, GLfloat x = %f, GLfloat y = %f)", index, x, y);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (index >= MAX_VERTEX_ATTRIBS)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- GLfloat vals[4] = { x, y, 0, 1 };
- context->getState().setVertexAttribf(index, vals);
- }
-}
-
-void GL_APIENTRY VertexAttrib2fv(GLuint index, const GLfloat* values)
-{
- EVENT("(GLuint index = %d, const GLfloat* values = 0x%0.8p)", index, values);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (index >= MAX_VERTEX_ATTRIBS)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- GLfloat vals[4] = { values[0], values[1], 0, 1 };
- context->getState().setVertexAttribf(index, vals);
- }
-}
-
-void GL_APIENTRY VertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z)
-{
- EVENT("(GLuint index = %d, GLfloat x = %f, GLfloat y = %f, GLfloat z = %f)", index, x, y, z);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (index >= MAX_VERTEX_ATTRIBS)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- GLfloat vals[4] = { x, y, z, 1 };
- context->getState().setVertexAttribf(index, vals);
- }
-}
-
-void GL_APIENTRY VertexAttrib3fv(GLuint index, const GLfloat* values)
-{
- EVENT("(GLuint index = %d, const GLfloat* values = 0x%0.8p)", index, values);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (index >= MAX_VERTEX_ATTRIBS)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- GLfloat vals[4] = { values[0], values[1], values[2], 1 };
- context->getState().setVertexAttribf(index, vals);
- }
-}
-
-void GL_APIENTRY VertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
-{
- EVENT("(GLuint index = %d, GLfloat x = %f, GLfloat y = %f, GLfloat z = %f, GLfloat w = %f)", index, x, y, z, w);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (index >= MAX_VERTEX_ATTRIBS)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- GLfloat vals[4] = { x, y, z, w };
- context->getState().setVertexAttribf(index, vals);
- }
-}
-
-void GL_APIENTRY VertexAttrib4fv(GLuint index, const GLfloat* values)
-{
- EVENT("(GLuint index = %d, const GLfloat* values = 0x%0.8p)", index, values);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (index >= MAX_VERTEX_ATTRIBS)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- context->getState().setVertexAttribf(index, values);
- }
-}
-
-void GL_APIENTRY VertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr)
-{
- EVENT("(GLuint index = %d, GLint size = %d, GLenum type = 0x%X, "
- "GLboolean normalized = %u, GLsizei stride = %d, const GLvoid* ptr = 0x%0.8p)",
- index, size, type, normalized, stride, ptr);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (index >= MAX_VERTEX_ATTRIBS)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- if (size < 1 || size > 4)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- switch (type)
- {
- case GL_BYTE:
- case GL_UNSIGNED_BYTE:
- case GL_SHORT:
- case GL_UNSIGNED_SHORT:
- case GL_FIXED:
- case GL_FLOAT:
- break;
-
- case GL_HALF_FLOAT:
- case GL_INT:
- case GL_UNSIGNED_INT:
- case GL_INT_2_10_10_10_REV:
- case GL_UNSIGNED_INT_2_10_10_10_REV:
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- if (stride < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- if ((type == GL_INT_2_10_10_10_REV || type == GL_UNSIGNED_INT_2_10_10_10_REV) && size != 4)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- // [OpenGL ES 3.0.2] Section 2.8 page 24:
- // An INVALID_OPERATION error is generated when a non-zero vertex array object
- // is bound, zero is bound to the ARRAY_BUFFER buffer object binding point,
- // and the pointer argument is not NULL.
- if (context->getState().getVertexArray()->id() != 0 && context->getState().getArrayBufferId() == 0 && ptr != NULL)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- context->getState().setVertexAttribState(index, context->getState().getTargetBuffer(GL_ARRAY_BUFFER), size, type,
- normalized == GL_TRUE, false, stride, ptr);
- }
-}
-
-void GL_APIENTRY Viewport(GLint x, GLint y, GLsizei width, GLsizei height)
-{
- EVENT("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)", x, y, width, height);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (width < 0 || height < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- context->getState().setViewportParams(x, y, width, height);
- }
-}
-
-}
diff --git a/src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0.h b/src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0.h
deleted file mode 100644
index eee5fb5468..0000000000
--- a/src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0.h
+++ /dev/null
@@ -1,163 +0,0 @@
-//
-// Copyright(c) 2014 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.
-//
-
-// entry_points_gles_2_0.h : Defines the GLES 2.0 entry points.
-
-#ifndef LIBGLESV2_ENTRYPOINTGLES20_H_
-#define LIBGLESV2_ENTRYPOINTGLES20_H_
-
-#include <GLES2/gl2.h>
-#include <export.h>
-
-namespace gl
-{
-
-ANGLE_EXPORT void GL_APIENTRY ActiveTexture(GLenum texture);
-ANGLE_EXPORT void GL_APIENTRY AttachShader(GLuint program, GLuint shader);
-ANGLE_EXPORT void GL_APIENTRY BindAttribLocation(GLuint program, GLuint index, const GLchar* name);
-ANGLE_EXPORT void GL_APIENTRY BindBuffer(GLenum target, GLuint buffer);
-ANGLE_EXPORT void GL_APIENTRY BindFramebuffer(GLenum target, GLuint framebuffer);
-ANGLE_EXPORT void GL_APIENTRY BindRenderbuffer(GLenum target, GLuint renderbuffer);
-ANGLE_EXPORT void GL_APIENTRY BindTexture(GLenum target, GLuint texture);
-ANGLE_EXPORT void GL_APIENTRY BlendColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
-ANGLE_EXPORT void GL_APIENTRY BlendEquation(GLenum mode);
-ANGLE_EXPORT void GL_APIENTRY BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha);
-ANGLE_EXPORT void GL_APIENTRY BlendFunc(GLenum sfactor, GLenum dfactor);
-ANGLE_EXPORT void GL_APIENTRY BlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
-ANGLE_EXPORT void GL_APIENTRY BufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage);
-ANGLE_EXPORT void GL_APIENTRY BufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data);
-ANGLE_EXPORT GLenum GL_APIENTRY CheckFramebufferStatus(GLenum target);
-ANGLE_EXPORT void GL_APIENTRY Clear(GLbitfield mask);
-ANGLE_EXPORT void GL_APIENTRY ClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
-ANGLE_EXPORT void GL_APIENTRY ClearDepthf(GLfloat depth);
-ANGLE_EXPORT void GL_APIENTRY ClearStencil(GLint s);
-ANGLE_EXPORT void GL_APIENTRY ColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
-ANGLE_EXPORT void GL_APIENTRY CompileShader(GLuint shader);
-ANGLE_EXPORT void GL_APIENTRY CompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data);
-ANGLE_EXPORT void GL_APIENTRY CompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data);
-ANGLE_EXPORT void GL_APIENTRY CopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
-ANGLE_EXPORT void GL_APIENTRY CopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
-ANGLE_EXPORT GLuint GL_APIENTRY CreateProgram(void);
-ANGLE_EXPORT GLuint GL_APIENTRY CreateShader(GLenum type);
-ANGLE_EXPORT void GL_APIENTRY CullFace(GLenum mode);
-ANGLE_EXPORT void GL_APIENTRY DeleteBuffers(GLsizei n, const GLuint* buffers);
-ANGLE_EXPORT void GL_APIENTRY DeleteFramebuffers(GLsizei n, const GLuint* framebuffers);
-ANGLE_EXPORT void GL_APIENTRY DeleteProgram(GLuint program);
-ANGLE_EXPORT void GL_APIENTRY DeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers);
-ANGLE_EXPORT void GL_APIENTRY DeleteShader(GLuint shader);
-ANGLE_EXPORT void GL_APIENTRY DeleteTextures(GLsizei n, const GLuint* textures);
-ANGLE_EXPORT void GL_APIENTRY DepthFunc(GLenum func);
-ANGLE_EXPORT void GL_APIENTRY DepthMask(GLboolean flag);
-ANGLE_EXPORT void GL_APIENTRY DepthRangef(GLfloat n, GLfloat f);
-ANGLE_EXPORT void GL_APIENTRY DetachShader(GLuint program, GLuint shader);
-ANGLE_EXPORT void GL_APIENTRY Disable(GLenum cap);
-ANGLE_EXPORT void GL_APIENTRY DisableVertexAttribArray(GLuint index);
-ANGLE_EXPORT void GL_APIENTRY DrawArrays(GLenum mode, GLint first, GLsizei count);
-ANGLE_EXPORT void GL_APIENTRY DrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices);
-ANGLE_EXPORT void GL_APIENTRY Enable(GLenum cap);
-ANGLE_EXPORT void GL_APIENTRY EnableVertexAttribArray(GLuint index);
-ANGLE_EXPORT void GL_APIENTRY Finish(void);
-ANGLE_EXPORT void GL_APIENTRY Flush(void);
-ANGLE_EXPORT void GL_APIENTRY FramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
-ANGLE_EXPORT void GL_APIENTRY FramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
-ANGLE_EXPORT void GL_APIENTRY FrontFace(GLenum mode);
-ANGLE_EXPORT void GL_APIENTRY GenBuffers(GLsizei n, GLuint* buffers);
-ANGLE_EXPORT void GL_APIENTRY GenerateMipmap(GLenum target);
-ANGLE_EXPORT void GL_APIENTRY GenFramebuffers(GLsizei n, GLuint* framebuffers);
-ANGLE_EXPORT void GL_APIENTRY GenRenderbuffers(GLsizei n, GLuint* renderbuffers);
-ANGLE_EXPORT void GL_APIENTRY GenTextures(GLsizei n, GLuint* textures);
-ANGLE_EXPORT void GL_APIENTRY GetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name);
-ANGLE_EXPORT void GL_APIENTRY GetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name);
-ANGLE_EXPORT void GL_APIENTRY GetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders);
-ANGLE_EXPORT GLint GL_APIENTRY GetAttribLocation(GLuint program, const GLchar* name);
-ANGLE_EXPORT void GL_APIENTRY GetBooleanv(GLenum pname, GLboolean* params);
-ANGLE_EXPORT void GL_APIENTRY GetBufferParameteriv(GLenum target, GLenum pname, GLint* params);
-ANGLE_EXPORT GLenum GL_APIENTRY GetError(void);
-ANGLE_EXPORT void GL_APIENTRY GetFloatv(GLenum pname, GLfloat* params);
-ANGLE_EXPORT void GL_APIENTRY GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params);
-ANGLE_EXPORT void GL_APIENTRY GetIntegerv(GLenum pname, GLint* params);
-ANGLE_EXPORT void GL_APIENTRY GetProgramiv(GLuint program, GLenum pname, GLint* params);
-ANGLE_EXPORT void GL_APIENTRY GetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog);
-ANGLE_EXPORT void GL_APIENTRY GetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params);
-ANGLE_EXPORT void GL_APIENTRY GetShaderiv(GLuint shader, GLenum pname, GLint* params);
-ANGLE_EXPORT void GL_APIENTRY GetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog);
-ANGLE_EXPORT void GL_APIENTRY GetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision);
-ANGLE_EXPORT void GL_APIENTRY GetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source);
-ANGLE_EXPORT const GLubyte *GL_APIENTRY GetString(GLenum name);
-ANGLE_EXPORT void GL_APIENTRY GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params);
-ANGLE_EXPORT void GL_APIENTRY GetTexParameteriv(GLenum target, GLenum pname, GLint* params);
-ANGLE_EXPORT void GL_APIENTRY GetUniformfv(GLuint program, GLint location, GLfloat* params);
-ANGLE_EXPORT void GL_APIENTRY GetUniformiv(GLuint program, GLint location, GLint* params);
-ANGLE_EXPORT GLint GL_APIENTRY GetUniformLocation(GLuint program, const GLchar* name);
-ANGLE_EXPORT void GL_APIENTRY GetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params);
-ANGLE_EXPORT void GL_APIENTRY GetVertexAttribiv(GLuint index, GLenum pname, GLint* params);
-ANGLE_EXPORT void GL_APIENTRY GetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid** pointer);
-ANGLE_EXPORT void GL_APIENTRY Hint(GLenum target, GLenum mode);
-ANGLE_EXPORT GLboolean GL_APIENTRY IsBuffer(GLuint buffer);
-ANGLE_EXPORT GLboolean GL_APIENTRY IsEnabled(GLenum cap);
-ANGLE_EXPORT GLboolean GL_APIENTRY IsFramebuffer(GLuint framebuffer);
-ANGLE_EXPORT GLboolean GL_APIENTRY IsProgram(GLuint program);
-ANGLE_EXPORT GLboolean GL_APIENTRY IsRenderbuffer(GLuint renderbuffer);
-ANGLE_EXPORT GLboolean GL_APIENTRY IsShader(GLuint shader);
-ANGLE_EXPORT GLboolean GL_APIENTRY IsTexture(GLuint texture);
-ANGLE_EXPORT void GL_APIENTRY LineWidth(GLfloat width);
-ANGLE_EXPORT void GL_APIENTRY LinkProgram(GLuint program);
-ANGLE_EXPORT void GL_APIENTRY PixelStorei(GLenum pname, GLint param);
-ANGLE_EXPORT void GL_APIENTRY PolygonOffset(GLfloat factor, GLfloat units);
-ANGLE_EXPORT void GL_APIENTRY ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels);
-ANGLE_EXPORT void GL_APIENTRY ReleaseShaderCompiler(void);
-ANGLE_EXPORT void GL_APIENTRY RenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
-ANGLE_EXPORT void GL_APIENTRY SampleCoverage(GLfloat value, GLboolean invert);
-ANGLE_EXPORT void GL_APIENTRY Scissor(GLint x, GLint y, GLsizei width, GLsizei height);
-ANGLE_EXPORT void GL_APIENTRY ShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length);
-ANGLE_EXPORT void GL_APIENTRY ShaderSource(GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length);
-ANGLE_EXPORT void GL_APIENTRY StencilFunc(GLenum func, GLint ref, GLuint mask);
-ANGLE_EXPORT void GL_APIENTRY StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask);
-ANGLE_EXPORT void GL_APIENTRY StencilMask(GLuint mask);
-ANGLE_EXPORT void GL_APIENTRY StencilMaskSeparate(GLenum face, GLuint mask);
-ANGLE_EXPORT void GL_APIENTRY StencilOp(GLenum fail, GLenum zfail, GLenum zpass);
-ANGLE_EXPORT void GL_APIENTRY StencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
-ANGLE_EXPORT void GL_APIENTRY TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels);
-ANGLE_EXPORT void GL_APIENTRY TexParameterf(GLenum target, GLenum pname, GLfloat param);
-ANGLE_EXPORT void GL_APIENTRY TexParameterfv(GLenum target, GLenum pname, const GLfloat* params);
-ANGLE_EXPORT void GL_APIENTRY TexParameteri(GLenum target, GLenum pname, GLint param);
-ANGLE_EXPORT void GL_APIENTRY TexParameteriv(GLenum target, GLenum pname, const GLint* params);
-ANGLE_EXPORT void GL_APIENTRY TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels);
-ANGLE_EXPORT void GL_APIENTRY Uniform1f(GLint location, GLfloat x);
-ANGLE_EXPORT void GL_APIENTRY Uniform1fv(GLint location, GLsizei count, const GLfloat* v);
-ANGLE_EXPORT void GL_APIENTRY Uniform1i(GLint location, GLint x);
-ANGLE_EXPORT void GL_APIENTRY Uniform1iv(GLint location, GLsizei count, const GLint* v);
-ANGLE_EXPORT void GL_APIENTRY Uniform2f(GLint location, GLfloat x, GLfloat y);
-ANGLE_EXPORT void GL_APIENTRY Uniform2fv(GLint location, GLsizei count, const GLfloat* v);
-ANGLE_EXPORT void GL_APIENTRY Uniform2i(GLint location, GLint x, GLint y);
-ANGLE_EXPORT void GL_APIENTRY Uniform2iv(GLint location, GLsizei count, const GLint* v);
-ANGLE_EXPORT void GL_APIENTRY Uniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z);
-ANGLE_EXPORT void GL_APIENTRY Uniform3fv(GLint location, GLsizei count, const GLfloat* v);
-ANGLE_EXPORT void GL_APIENTRY Uniform3i(GLint location, GLint x, GLint y, GLint z);
-ANGLE_EXPORT void GL_APIENTRY Uniform3iv(GLint location, GLsizei count, const GLint* v);
-ANGLE_EXPORT void GL_APIENTRY Uniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
-ANGLE_EXPORT void GL_APIENTRY Uniform4fv(GLint location, GLsizei count, const GLfloat* v);
-ANGLE_EXPORT void GL_APIENTRY Uniform4i(GLint location, GLint x, GLint y, GLint z, GLint w);
-ANGLE_EXPORT void GL_APIENTRY Uniform4iv(GLint location, GLsizei count, const GLint* v);
-ANGLE_EXPORT void GL_APIENTRY UniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
-ANGLE_EXPORT void GL_APIENTRY UniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
-ANGLE_EXPORT void GL_APIENTRY UniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
-ANGLE_EXPORT void GL_APIENTRY UseProgram(GLuint program);
-ANGLE_EXPORT void GL_APIENTRY ValidateProgram(GLuint program);
-ANGLE_EXPORT void GL_APIENTRY VertexAttrib1f(GLuint indx, GLfloat x);
-ANGLE_EXPORT void GL_APIENTRY VertexAttrib1fv(GLuint indx, const GLfloat* values);
-ANGLE_EXPORT void GL_APIENTRY VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y);
-ANGLE_EXPORT void GL_APIENTRY VertexAttrib2fv(GLuint indx, const GLfloat* values);
-ANGLE_EXPORT void GL_APIENTRY VertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z);
-ANGLE_EXPORT void GL_APIENTRY VertexAttrib3fv(GLuint indx, const GLfloat* values);
-ANGLE_EXPORT void GL_APIENTRY VertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
-ANGLE_EXPORT void GL_APIENTRY VertexAttrib4fv(GLuint indx, const GLfloat* values);
-ANGLE_EXPORT void GL_APIENTRY VertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr);
-ANGLE_EXPORT void GL_APIENTRY Viewport(GLint x, GLint y, GLsizei width, GLsizei height);
-
-}
-
-#endif // LIBGLESV2_ENTRYPOINTGLES20_H_
diff --git a/src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0_autogen.cpp b/src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0_autogen.cpp
new file mode 100644
index 0000000000..ae0e944406
--- /dev/null
+++ b/src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0_autogen.cpp
@@ -0,0 +1,2612 @@
+// GENERATED FILE - DO NOT EDIT.
+// Generated by generate_entry_points.py using data from gl.xml.
+//
+// Copyright 2017 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.
+//
+// entry_points_gles_2_0_autogen.cpp:
+// Defines the GLES 2.0 entry points.
+
+#include "libANGLE/Context.h"
+#include "libANGLE/validationES2.h"
+#include "libGLESv2/global_state.h"
+
+namespace gl
+{
+void GL_APIENTRY ActiveTexture(GLenum texture)
+{
+ EVENT("(GLenum texture = 0x%X)", texture);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ActiveTexture>(texture);
+
+ if (context->skipValidation() || ValidateActiveTexture(context, texture))
+ {
+ context->activeTexture(texture);
+ }
+ }
+}
+
+void GL_APIENTRY AttachShader(GLuint program, GLuint shader)
+{
+ EVENT("(GLuint program = %u, GLuint shader = %u)", program, shader);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::AttachShader>(program, shader);
+
+ if (context->skipValidation() || ValidateAttachShader(context, program, shader))
+ {
+ context->attachShader(program, shader);
+ }
+ }
+}
+
+void GL_APIENTRY BindAttribLocation(GLuint program, GLuint index, const GLchar *name)
+{
+ EVENT("(GLuint program = %u, GLuint index = %u, const GLchar *name = 0x%0.8p)", program, index,
+ name);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::BindAttribLocation>(program, index, name);
+
+ if (context->skipValidation() || ValidateBindAttribLocation(context, program, index, name))
+ {
+ context->bindAttribLocation(program, index, name);
+ }
+ }
+}
+
+void GL_APIENTRY BindBuffer(GLenum target, GLuint buffer)
+{
+ EVENT("(GLenum target = 0x%X, GLuint buffer = %u)", target, buffer);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+ context->gatherParams<EntryPoint::BindBuffer>(targetPacked, buffer);
+
+ if (context->skipValidation() || ValidateBindBuffer(context, targetPacked, buffer))
+ {
+ context->bindBuffer(targetPacked, buffer);
+ }
+ }
+}
+
+void GL_APIENTRY BindFramebuffer(GLenum target, GLuint framebuffer)
+{
+ EVENT("(GLenum target = 0x%X, GLuint framebuffer = %u)", target, framebuffer);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::BindFramebuffer>(target, framebuffer);
+
+ if (context->skipValidation() || ValidateBindFramebuffer(context, target, framebuffer))
+ {
+ context->bindFramebuffer(target, framebuffer);
+ }
+ }
+}
+
+void GL_APIENTRY BindRenderbuffer(GLenum target, GLuint renderbuffer)
+{
+ EVENT("(GLenum target = 0x%X, GLuint renderbuffer = %u)", target, renderbuffer);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::BindRenderbuffer>(target, renderbuffer);
+
+ if (context->skipValidation() || ValidateBindRenderbuffer(context, target, renderbuffer))
+ {
+ context->bindRenderbuffer(target, renderbuffer);
+ }
+ }
+}
+
+void GL_APIENTRY BindTexture(GLenum target, GLuint texture)
+{
+ EVENT("(GLenum target = 0x%X, GLuint texture = %u)", target, texture);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::BindTexture>(target, texture);
+
+ if (context->skipValidation() || ValidateBindTexture(context, target, texture))
+ {
+ context->bindTexture(target, texture);
+ }
+ }
+}
+
+void GL_APIENTRY BlendColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+{
+ EVENT("(GLfloat red = %f, GLfloat green = %f, GLfloat blue = %f, GLfloat alpha = %f)", red,
+ green, blue, alpha);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::BlendColor>(red, green, blue, alpha);
+
+ if (context->skipValidation() || ValidateBlendColor(context, red, green, blue, alpha))
+ {
+ context->blendColor(red, green, blue, alpha);
+ }
+ }
+}
+
+void GL_APIENTRY BlendEquation(GLenum mode)
+{
+ EVENT("(GLenum mode = 0x%X)", mode);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::BlendEquation>(mode);
+
+ if (context->skipValidation() || ValidateBlendEquation(context, mode))
+ {
+ context->blendEquation(mode);
+ }
+ }
+}
+
+void GL_APIENTRY BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
+{
+ EVENT("(GLenum modeRGB = 0x%X, GLenum modeAlpha = 0x%X)", modeRGB, modeAlpha);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::BlendEquationSeparate>(modeRGB, modeAlpha);
+
+ if (context->skipValidation() || ValidateBlendEquationSeparate(context, modeRGB, modeAlpha))
+ {
+ context->blendEquationSeparate(modeRGB, modeAlpha);
+ }
+ }
+}
+
+void GL_APIENTRY BlendFunc(GLenum sfactor, GLenum dfactor)
+{
+ EVENT("(GLenum sfactor = 0x%X, GLenum dfactor = 0x%X)", sfactor, dfactor);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::BlendFunc>(sfactor, dfactor);
+
+ if (context->skipValidation() || ValidateBlendFunc(context, sfactor, dfactor))
+ {
+ context->blendFunc(sfactor, dfactor);
+ }
+ }
+}
+
+void GL_APIENTRY BlendFuncSeparate(GLenum sfactorRGB,
+ GLenum dfactorRGB,
+ GLenum sfactorAlpha,
+ GLenum dfactorAlpha)
+{
+ EVENT(
+ "(GLenum sfactorRGB = 0x%X, GLenum dfactorRGB = 0x%X, GLenum sfactorAlpha = 0x%X, GLenum "
+ "dfactorAlpha = 0x%X)",
+ sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::BlendFuncSeparate>(sfactorRGB, dfactorRGB, sfactorAlpha,
+ dfactorAlpha);
+
+ if (context->skipValidation() ||
+ ValidateBlendFuncSeparate(context, sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha))
+ {
+ context->blendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);
+ }
+ }
+}
+
+void GL_APIENTRY BufferData(GLenum target, GLsizeiptr size, const void *data, GLenum usage)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLsizeiptr size = %d, const void *data = 0x%0.8p, GLenum usage = "
+ "0x%X)",
+ target, size, data, usage);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+ BufferUsage usagePacked = FromGLenum<BufferUsage>(usage);
+ context->gatherParams<EntryPoint::BufferData>(targetPacked, size, data, usagePacked);
+
+ if (context->skipValidation() ||
+ ValidateBufferData(context, targetPacked, size, data, usagePacked))
+ {
+ context->bufferData(targetPacked, size, data, usagePacked);
+ }
+ }
+}
+
+void GL_APIENTRY BufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const void *data)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr size = %d, const void *data = "
+ "0x%0.8p)",
+ target, offset, size, data);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+ context->gatherParams<EntryPoint::BufferSubData>(targetPacked, offset, size, data);
+
+ if (context->skipValidation() ||
+ ValidateBufferSubData(context, targetPacked, offset, size, data))
+ {
+ context->bufferSubData(targetPacked, offset, size, data);
+ }
+ }
+}
+
+GLenum GL_APIENTRY CheckFramebufferStatus(GLenum target)
+{
+ EVENT("(GLenum target = 0x%X)", target);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::CheckFramebufferStatus>(target);
+
+ if (context->skipValidation() || ValidateCheckFramebufferStatus(context, target))
+ {
+ return context->checkFramebufferStatus(target);
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::CheckFramebufferStatus, GLenum>();
+}
+
+void GL_APIENTRY Clear(GLbitfield mask)
+{
+ EVENT("(GLbitfield mask = 0x%X)", mask);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Clear>(mask);
+
+ if (context->skipValidation() || ValidateClear(context, mask))
+ {
+ context->clear(mask);
+ }
+ }
+}
+
+void GL_APIENTRY ClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+{
+ EVENT("(GLfloat red = %f, GLfloat green = %f, GLfloat blue = %f, GLfloat alpha = %f)", red,
+ green, blue, alpha);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ClearColor>(red, green, blue, alpha);
+
+ if (context->skipValidation() || ValidateClearColor(context, red, green, blue, alpha))
+ {
+ context->clearColor(red, green, blue, alpha);
+ }
+ }
+}
+
+void GL_APIENTRY ClearDepthf(GLfloat d)
+{
+ EVENT("(GLfloat d = %f)", d);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ClearDepthf>(d);
+
+ if (context->skipValidation() || ValidateClearDepthf(context, d))
+ {
+ context->clearDepthf(d);
+ }
+ }
+}
+
+void GL_APIENTRY ClearStencil(GLint s)
+{
+ EVENT("(GLint s = %d)", s);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ClearStencil>(s);
+
+ if (context->skipValidation() || ValidateClearStencil(context, s))
+ {
+ context->clearStencil(s);
+ }
+ }
+}
+
+void GL_APIENTRY ColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+{
+ EVENT("(GLboolean red = %u, GLboolean green = %u, GLboolean blue = %u, GLboolean alpha = %u)",
+ red, green, blue, alpha);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ColorMask>(red, green, blue, alpha);
+
+ if (context->skipValidation() || ValidateColorMask(context, red, green, blue, alpha))
+ {
+ context->colorMask(red, green, blue, alpha);
+ }
+ }
+}
+
+void GL_APIENTRY CompileShader(GLuint shader)
+{
+ EVENT("(GLuint shader = %u)", shader);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::CompileShader>(shader);
+
+ if (context->skipValidation() || ValidateCompileShader(context, shader))
+ {
+ context->compileShader(shader);
+ }
+ }
+}
+
+void GL_APIENTRY CompressedTexImage2D(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLint border,
+ GLsizei imageSize,
+ const void *data)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, GLsizei width = "
+ "%d, GLsizei height = %d, GLint border = %d, GLsizei imageSize = %d, const void *data = "
+ "0x%0.8p)",
+ target, level, internalformat, width, height, border, imageSize, data);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::CompressedTexImage2D>(
+ target, level, internalformat, width, height, border, imageSize, data);
+
+ if (context->skipValidation() ||
+ ValidateCompressedTexImage2D(context, target, level, internalformat, width, height,
+ border, imageSize, data))
+ {
+ context->compressedTexImage2D(target, level, internalformat, width, height, border,
+ imageSize, data);
+ }
+ }
+}
+
+void GL_APIENTRY CompressedTexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLsizei imageSize,
+ const void *data)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, GLsizei "
+ "width = %d, GLsizei height = %d, GLenum format = 0x%X, GLsizei imageSize = %d, const void "
+ "*data = 0x%0.8p)",
+ target, level, xoffset, yoffset, width, height, format, imageSize, data);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::CompressedTexSubImage2D>(
+ target, level, xoffset, yoffset, width, height, format, imageSize, data);
+
+ if (context->skipValidation() ||
+ ValidateCompressedTexSubImage2D(context, target, level, xoffset, yoffset, width, height,
+ format, imageSize, data))
+ {
+ context->compressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format,
+ imageSize, data);
+ }
+ }
+}
+
+void GL_APIENTRY CopyTexImage2D(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLint border)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, GLint x = %d, "
+ "GLint y = %d, GLsizei width = %d, GLsizei height = %d, GLint border = %d)",
+ target, level, internalformat, x, y, width, height, border);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::CopyTexImage2D>(target, level, internalformat, x, y,
+ width, height, border);
+
+ if (context->skipValidation() ||
+ ValidateCopyTexImage2D(context, target, level, internalformat, x, y, width, height,
+ border))
+ {
+ context->copyTexImage2D(target, level, internalformat, x, y, width, height, border);
+ }
+ }
+}
+
+void GL_APIENTRY CopyTexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, GLint x "
+ "= %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)",
+ target, level, xoffset, yoffset, x, y, width, height);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::CopyTexSubImage2D>(target, level, xoffset, yoffset, x, y,
+ width, height);
+
+ if (context->skipValidation() || ValidateCopyTexSubImage2D(context, target, level, xoffset,
+ yoffset, x, y, width, height))
+ {
+ context->copyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
+ }
+ }
+}
+
+GLuint GL_APIENTRY CreateProgram()
+{
+ EVENT("()");
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::CreateProgram>();
+
+ if (context->skipValidation() || ValidateCreateProgram(context))
+ {
+ return context->createProgram();
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::CreateProgram, GLuint>();
+}
+
+GLuint GL_APIENTRY CreateShader(GLenum type)
+{
+ EVENT("(GLenum type = 0x%X)", type);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::CreateShader>(type);
+
+ if (context->skipValidation() || ValidateCreateShader(context, type))
+ {
+ return context->createShader(type);
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::CreateShader, GLuint>();
+}
+
+void GL_APIENTRY CullFace(GLenum mode)
+{
+ EVENT("(GLenum mode = 0x%X)", mode);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ CullFaceMode modePacked = FromGLenum<CullFaceMode>(mode);
+ context->gatherParams<EntryPoint::CullFace>(modePacked);
+
+ if (context->skipValidation() || ValidateCullFace(context, modePacked))
+ {
+ context->cullFace(modePacked);
+ }
+ }
+}
+
+void GL_APIENTRY DeleteBuffers(GLsizei n, const GLuint *buffers)
+{
+ EVENT("(GLsizei n = %d, const GLuint *buffers = 0x%0.8p)", n, buffers);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::DeleteBuffers>(n, buffers);
+
+ if (context->skipValidation() || ValidateDeleteBuffers(context, n, buffers))
+ {
+ context->deleteBuffers(n, buffers);
+ }
+ }
+}
+
+void GL_APIENTRY DeleteFramebuffers(GLsizei n, const GLuint *framebuffers)
+{
+ EVENT("(GLsizei n = %d, const GLuint *framebuffers = 0x%0.8p)", n, framebuffers);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::DeleteFramebuffers>(n, framebuffers);
+
+ if (context->skipValidation() || ValidateDeleteFramebuffers(context, n, framebuffers))
+ {
+ context->deleteFramebuffers(n, framebuffers);
+ }
+ }
+}
+
+void GL_APIENTRY DeleteProgram(GLuint program)
+{
+ EVENT("(GLuint program = %u)", program);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::DeleteProgram>(program);
+
+ if (context->skipValidation() || ValidateDeleteProgram(context, program))
+ {
+ context->deleteProgram(program);
+ }
+ }
+}
+
+void GL_APIENTRY DeleteRenderbuffers(GLsizei n, const GLuint *renderbuffers)
+{
+ EVENT("(GLsizei n = %d, const GLuint *renderbuffers = 0x%0.8p)", n, renderbuffers);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::DeleteRenderbuffers>(n, renderbuffers);
+
+ if (context->skipValidation() || ValidateDeleteRenderbuffers(context, n, renderbuffers))
+ {
+ context->deleteRenderbuffers(n, renderbuffers);
+ }
+ }
+}
+
+void GL_APIENTRY DeleteShader(GLuint shader)
+{
+ EVENT("(GLuint shader = %u)", shader);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::DeleteShader>(shader);
+
+ if (context->skipValidation() || ValidateDeleteShader(context, shader))
+ {
+ context->deleteShader(shader);
+ }
+ }
+}
+
+void GL_APIENTRY DeleteTextures(GLsizei n, const GLuint *textures)
+{
+ EVENT("(GLsizei n = %d, const GLuint *textures = 0x%0.8p)", n, textures);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::DeleteTextures>(n, textures);
+
+ if (context->skipValidation() || ValidateDeleteTextures(context, n, textures))
+ {
+ context->deleteTextures(n, textures);
+ }
+ }
+}
+
+void GL_APIENTRY DepthFunc(GLenum func)
+{
+ EVENT("(GLenum func = 0x%X)", func);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::DepthFunc>(func);
+
+ if (context->skipValidation() || ValidateDepthFunc(context, func))
+ {
+ context->depthFunc(func);
+ }
+ }
+}
+
+void GL_APIENTRY DepthMask(GLboolean flag)
+{
+ EVENT("(GLboolean flag = %u)", flag);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::DepthMask>(flag);
+
+ if (context->skipValidation() || ValidateDepthMask(context, flag))
+ {
+ context->depthMask(flag);
+ }
+ }
+}
+
+void GL_APIENTRY DepthRangef(GLfloat n, GLfloat f)
+{
+ EVENT("(GLfloat n = %f, GLfloat f = %f)", n, f);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::DepthRangef>(n, f);
+
+ if (context->skipValidation() || ValidateDepthRangef(context, n, f))
+ {
+ context->depthRangef(n, f);
+ }
+ }
+}
+
+void GL_APIENTRY DetachShader(GLuint program, GLuint shader)
+{
+ EVENT("(GLuint program = %u, GLuint shader = %u)", program, shader);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::DetachShader>(program, shader);
+
+ if (context->skipValidation() || ValidateDetachShader(context, program, shader))
+ {
+ context->detachShader(program, shader);
+ }
+ }
+}
+
+void GL_APIENTRY Disable(GLenum cap)
+{
+ EVENT("(GLenum cap = 0x%X)", cap);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Disable>(cap);
+
+ if (context->skipValidation() || ValidateDisable(context, cap))
+ {
+ context->disable(cap);
+ }
+ }
+}
+
+void GL_APIENTRY DisableVertexAttribArray(GLuint index)
+{
+ EVENT("(GLuint index = %u)", index);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::DisableVertexAttribArray>(index);
+
+ if (context->skipValidation() || ValidateDisableVertexAttribArray(context, index))
+ {
+ context->disableVertexAttribArray(index);
+ }
+ }
+}
+
+void GL_APIENTRY DrawArrays(GLenum mode, GLint first, GLsizei count)
+{
+ EVENT("(GLenum mode = 0x%X, GLint first = %d, GLsizei count = %d)", mode, first, count);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::DrawArrays>(mode, first, count);
+
+ if (context->skipValidation() || ValidateDrawArrays(context, mode, first, count))
+ {
+ context->drawArrays(mode, first, count);
+ }
+ }
+}
+
+void GL_APIENTRY DrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices)
+{
+ EVENT(
+ "(GLenum mode = 0x%X, GLsizei count = %d, GLenum type = 0x%X, const void *indices = "
+ "0x%0.8p)",
+ mode, count, type, indices);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::DrawElements>(mode, count, type, indices);
+
+ if (context->skipValidation() || ValidateDrawElements(context, mode, count, type, indices))
+ {
+ context->drawElements(mode, count, type, indices);
+ }
+ }
+}
+
+void GL_APIENTRY Enable(GLenum cap)
+{
+ EVENT("(GLenum cap = 0x%X)", cap);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Enable>(cap);
+
+ if (context->skipValidation() || ValidateEnable(context, cap))
+ {
+ context->enable(cap);
+ }
+ }
+}
+
+void GL_APIENTRY EnableVertexAttribArray(GLuint index)
+{
+ EVENT("(GLuint index = %u)", index);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::EnableVertexAttribArray>(index);
+
+ if (context->skipValidation() || ValidateEnableVertexAttribArray(context, index))
+ {
+ context->enableVertexAttribArray(index);
+ }
+ }
+}
+
+void GL_APIENTRY Finish()
+{
+ EVENT("()");
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Finish>();
+
+ if (context->skipValidation() || ValidateFinish(context))
+ {
+ context->finish();
+ }
+ }
+}
+
+void GL_APIENTRY Flush()
+{
+ EVENT("()");
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Flush>();
+
+ if (context->skipValidation() || ValidateFlush(context))
+ {
+ context->flush();
+ }
+ }
+}
+
+void GL_APIENTRY FramebufferRenderbuffer(GLenum target,
+ GLenum attachment,
+ GLenum renderbuffertarget,
+ GLuint renderbuffer)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum renderbuffertarget = 0x%X, GLuint "
+ "renderbuffer = %u)",
+ target, attachment, renderbuffertarget, renderbuffer);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::FramebufferRenderbuffer>(
+ target, attachment, renderbuffertarget, renderbuffer);
+
+ if (context->skipValidation() ||
+ ValidateFramebufferRenderbuffer(context, target, attachment, renderbuffertarget,
+ renderbuffer))
+ {
+ context->framebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
+ }
+ }
+}
+
+void GL_APIENTRY FramebufferTexture2D(GLenum target,
+ GLenum attachment,
+ GLenum textarget,
+ GLuint texture,
+ GLint level)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum textarget = 0x%X, GLuint texture "
+ "= %u, GLint level = %d)",
+ target, attachment, textarget, texture, level);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::FramebufferTexture2D>(target, attachment, textarget,
+ texture, level);
+
+ if (context->skipValidation() ||
+ ValidateFramebufferTexture2D(context, target, attachment, textarget, texture, level))
+ {
+ context->framebufferTexture2D(target, attachment, textarget, texture, level);
+ }
+ }
+}
+
+void GL_APIENTRY FrontFace(GLenum mode)
+{
+ EVENT("(GLenum mode = 0x%X)", mode);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::FrontFace>(mode);
+
+ if (context->skipValidation() || ValidateFrontFace(context, mode))
+ {
+ context->frontFace(mode);
+ }
+ }
+}
+
+void GL_APIENTRY GenBuffers(GLsizei n, GLuint *buffers)
+{
+ EVENT("(GLsizei n = %d, GLuint *buffers = 0x%0.8p)", n, buffers);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GenBuffers>(n, buffers);
+
+ if (context->skipValidation() || ValidateGenBuffers(context, n, buffers))
+ {
+ context->genBuffers(n, buffers);
+ }
+ }
+}
+
+void GL_APIENTRY GenerateMipmap(GLenum target)
+{
+ EVENT("(GLenum target = 0x%X)", target);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GenerateMipmap>(target);
+
+ if (context->skipValidation() || ValidateGenerateMipmap(context, target))
+ {
+ context->generateMipmap(target);
+ }
+ }
+}
+
+void GL_APIENTRY GenFramebuffers(GLsizei n, GLuint *framebuffers)
+{
+ EVENT("(GLsizei n = %d, GLuint *framebuffers = 0x%0.8p)", n, framebuffers);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GenFramebuffers>(n, framebuffers);
+
+ if (context->skipValidation() || ValidateGenFramebuffers(context, n, framebuffers))
+ {
+ context->genFramebuffers(n, framebuffers);
+ }
+ }
+}
+
+void GL_APIENTRY GenRenderbuffers(GLsizei n, GLuint *renderbuffers)
+{
+ EVENT("(GLsizei n = %d, GLuint *renderbuffers = 0x%0.8p)", n, renderbuffers);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GenRenderbuffers>(n, renderbuffers);
+
+ if (context->skipValidation() || ValidateGenRenderbuffers(context, n, renderbuffers))
+ {
+ context->genRenderbuffers(n, renderbuffers);
+ }
+ }
+}
+
+void GL_APIENTRY GenTextures(GLsizei n, GLuint *textures)
+{
+ EVENT("(GLsizei n = %d, GLuint *textures = 0x%0.8p)", n, textures);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GenTextures>(n, textures);
+
+ if (context->skipValidation() || ValidateGenTextures(context, n, textures))
+ {
+ context->genTextures(n, textures);
+ }
+ }
+}
+
+void GL_APIENTRY GetActiveAttrib(GLuint program,
+ GLuint index,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *size,
+ GLenum *type,
+ GLchar *name)
+{
+ EVENT(
+ "(GLuint program = %u, GLuint index = %u, GLsizei bufSize = %d, GLsizei *length = 0x%0.8p, "
+ "GLint *size = 0x%0.8p, GLenum *type = 0x%0.8p, GLchar *name = 0x%0.8p)",
+ program, index, bufSize, length, size, type, name);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetActiveAttrib>(program, index, bufSize, length, size,
+ type, name);
+
+ if (context->skipValidation() ||
+ ValidateGetActiveAttrib(context, program, index, bufSize, length, size, type, name))
+ {
+ context->getActiveAttrib(program, index, bufSize, length, size, type, name);
+ }
+ }
+}
+
+void GL_APIENTRY GetActiveUniform(GLuint program,
+ GLuint index,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *size,
+ GLenum *type,
+ GLchar *name)
+{
+ EVENT(
+ "(GLuint program = %u, GLuint index = %u, GLsizei bufSize = %d, GLsizei *length = 0x%0.8p, "
+ "GLint *size = 0x%0.8p, GLenum *type = 0x%0.8p, GLchar *name = 0x%0.8p)",
+ program, index, bufSize, length, size, type, name);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetActiveUniform>(program, index, bufSize, length, size,
+ type, name);
+
+ if (context->skipValidation() ||
+ ValidateGetActiveUniform(context, program, index, bufSize, length, size, type, name))
+ {
+ context->getActiveUniform(program, index, bufSize, length, size, type, name);
+ }
+ }
+}
+
+void GL_APIENTRY GetAttachedShaders(GLuint program,
+ GLsizei maxCount,
+ GLsizei *count,
+ GLuint *shaders)
+{
+ EVENT(
+ "(GLuint program = %u, GLsizei maxCount = %d, GLsizei *count = 0x%0.8p, GLuint *shaders = "
+ "0x%0.8p)",
+ program, maxCount, count, shaders);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetAttachedShaders>(program, maxCount, count, shaders);
+
+ if (context->skipValidation() ||
+ ValidateGetAttachedShaders(context, program, maxCount, count, shaders))
+ {
+ context->getAttachedShaders(program, maxCount, count, shaders);
+ }
+ }
+}
+
+GLint GL_APIENTRY GetAttribLocation(GLuint program, const GLchar *name)
+{
+ EVENT("(GLuint program = %u, const GLchar *name = 0x%0.8p)", program, name);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetAttribLocation>(program, name);
+
+ if (context->skipValidation() || ValidateGetAttribLocation(context, program, name))
+ {
+ return context->getAttribLocation(program, name);
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::GetAttribLocation, GLint>();
+}
+
+void GL_APIENTRY GetBooleanv(GLenum pname, GLboolean *data)
+{
+ EVENT("(GLenum pname = 0x%X, GLboolean *data = 0x%0.8p)", pname, data);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetBooleanv>(pname, data);
+
+ if (context->skipValidation() || ValidateGetBooleanv(context, pname, data))
+ {
+ context->getBooleanv(pname, data);
+ }
+ }
+}
+
+void GL_APIENTRY GetBufferParameteriv(GLenum target, GLenum pname, GLint *params)
+{
+ EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", target, pname,
+ params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+ context->gatherParams<EntryPoint::GetBufferParameteriv>(targetPacked, pname, params);
+
+ if (context->skipValidation() ||
+ ValidateGetBufferParameteriv(context, targetPacked, pname, params))
+ {
+ context->getBufferParameteriv(targetPacked, pname, params);
+ }
+ }
+}
+
+GLenum GL_APIENTRY GetError()
+{
+ EVENT("()");
+
+ Context *context = GetGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetError>();
+
+ if (context->skipValidation() || ValidateGetError(context))
+ {
+ return context->getError();
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::GetError, GLenum>();
+}
+
+void GL_APIENTRY GetFloatv(GLenum pname, GLfloat *data)
+{
+ EVENT("(GLenum pname = 0x%X, GLfloat *data = 0x%0.8p)", pname, data);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetFloatv>(pname, data);
+
+ if (context->skipValidation() || ValidateGetFloatv(context, pname, data))
+ {
+ context->getFloatv(pname, data);
+ }
+ }
+}
+
+void GL_APIENTRY GetFramebufferAttachmentParameteriv(GLenum target,
+ GLenum attachment,
+ GLenum pname,
+ GLint *params)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum pname = 0x%X, GLint *params = "
+ "0x%0.8p)",
+ target, attachment, pname, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetFramebufferAttachmentParameteriv>(target, attachment,
+ pname, params);
+
+ if (context->skipValidation() ||
+ ValidateGetFramebufferAttachmentParameteriv(context, target, attachment, pname, params))
+ {
+ context->getFramebufferAttachmentParameteriv(target, attachment, pname, params);
+ }
+ }
+}
+
+void GL_APIENTRY GetIntegerv(GLenum pname, GLint *data)
+{
+ EVENT("(GLenum pname = 0x%X, GLint *data = 0x%0.8p)", pname, data);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetIntegerv>(pname, data);
+
+ if (context->skipValidation() || ValidateGetIntegerv(context, pname, data))
+ {
+ context->getIntegerv(pname, data);
+ }
+ }
+}
+
+void GL_APIENTRY GetProgramiv(GLuint program, GLenum pname, GLint *params)
+{
+ EVENT("(GLuint program = %u, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", program, pname,
+ params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetProgramiv>(program, pname, params);
+
+ if (context->skipValidation() || ValidateGetProgramiv(context, program, pname, params))
+ {
+ context->getProgramiv(program, pname, params);
+ }
+ }
+}
+
+void GL_APIENTRY GetProgramInfoLog(GLuint program,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLchar *infoLog)
+{
+ EVENT(
+ "(GLuint program = %u, GLsizei bufSize = %d, GLsizei *length = 0x%0.8p, GLchar *infoLog = "
+ "0x%0.8p)",
+ program, bufSize, length, infoLog);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetProgramInfoLog>(program, bufSize, length, infoLog);
+
+ if (context->skipValidation() ||
+ ValidateGetProgramInfoLog(context, program, bufSize, length, infoLog))
+ {
+ context->getProgramInfoLog(program, bufSize, length, infoLog);
+ }
+ }
+}
+
+void GL_APIENTRY GetRenderbufferParameteriv(GLenum target, GLenum pname, GLint *params)
+{
+ EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", target, pname,
+ params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetRenderbufferParameteriv>(target, pname, params);
+
+ if (context->skipValidation() ||
+ ValidateGetRenderbufferParameteriv(context, target, pname, params))
+ {
+ context->getRenderbufferParameteriv(target, pname, params);
+ }
+ }
+}
+
+void GL_APIENTRY GetShaderiv(GLuint shader, GLenum pname, GLint *params)
+{
+ EVENT("(GLuint shader = %u, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", shader, pname,
+ params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetShaderiv>(shader, pname, params);
+
+ if (context->skipValidation() || ValidateGetShaderiv(context, shader, pname, params))
+ {
+ context->getShaderiv(shader, pname, params);
+ }
+ }
+}
+
+void GL_APIENTRY GetShaderInfoLog(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog)
+{
+ EVENT(
+ "(GLuint shader = %u, GLsizei bufSize = %d, GLsizei *length = 0x%0.8p, GLchar *infoLog = "
+ "0x%0.8p)",
+ shader, bufSize, length, infoLog);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetShaderInfoLog>(shader, bufSize, length, infoLog);
+
+ if (context->skipValidation() ||
+ ValidateGetShaderInfoLog(context, shader, bufSize, length, infoLog))
+ {
+ context->getShaderInfoLog(shader, bufSize, length, infoLog);
+ }
+ }
+}
+
+void GL_APIENTRY GetShaderPrecisionFormat(GLenum shadertype,
+ GLenum precisiontype,
+ GLint *range,
+ GLint *precision)
+{
+ EVENT(
+ "(GLenum shadertype = 0x%X, GLenum precisiontype = 0x%X, GLint *range = 0x%0.8p, GLint "
+ "*precision = 0x%0.8p)",
+ shadertype, precisiontype, range, precision);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetShaderPrecisionFormat>(shadertype, precisiontype,
+ range, precision);
+
+ if (context->skipValidation() ||
+ ValidateGetShaderPrecisionFormat(context, shadertype, precisiontype, range, precision))
+ {
+ context->getShaderPrecisionFormat(shadertype, precisiontype, range, precision);
+ }
+ }
+}
+
+void GL_APIENTRY GetShaderSource(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source)
+{
+ EVENT(
+ "(GLuint shader = %u, GLsizei bufSize = %d, GLsizei *length = 0x%0.8p, GLchar *source = "
+ "0x%0.8p)",
+ shader, bufSize, length, source);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetShaderSource>(shader, bufSize, length, source);
+
+ if (context->skipValidation() ||
+ ValidateGetShaderSource(context, shader, bufSize, length, source))
+ {
+ context->getShaderSource(shader, bufSize, length, source);
+ }
+ }
+}
+
+const GLubyte *GL_APIENTRY GetString(GLenum name)
+{
+ EVENT("(GLenum name = 0x%X)", name);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetString>(name);
+
+ if (context->skipValidation() || ValidateGetString(context, name))
+ {
+ return context->getString(name);
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::GetString, const GLubyte *>();
+}
+
+void GL_APIENTRY GetTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
+{
+ EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLfloat *params = 0x%0.8p)", target, pname,
+ params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetTexParameterfv>(target, pname, params);
+
+ if (context->skipValidation() || ValidateGetTexParameterfv(context, target, pname, params))
+ {
+ context->getTexParameterfv(target, pname, params);
+ }
+ }
+}
+
+void GL_APIENTRY GetTexParameteriv(GLenum target, GLenum pname, GLint *params)
+{
+ EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", target, pname,
+ params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetTexParameteriv>(target, pname, params);
+
+ if (context->skipValidation() || ValidateGetTexParameteriv(context, target, pname, params))
+ {
+ context->getTexParameteriv(target, pname, params);
+ }
+ }
+}
+
+void GL_APIENTRY GetUniformfv(GLuint program, GLint location, GLfloat *params)
+{
+ EVENT("(GLuint program = %u, GLint location = %d, GLfloat *params = 0x%0.8p)", program,
+ location, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetUniformfv>(program, location, params);
+
+ if (context->skipValidation() || ValidateGetUniformfv(context, program, location, params))
+ {
+ context->getUniformfv(program, location, params);
+ }
+ }
+}
+
+void GL_APIENTRY GetUniformiv(GLuint program, GLint location, GLint *params)
+{
+ EVENT("(GLuint program = %u, GLint location = %d, GLint *params = 0x%0.8p)", program, location,
+ params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetUniformiv>(program, location, params);
+
+ if (context->skipValidation() || ValidateGetUniformiv(context, program, location, params))
+ {
+ context->getUniformiv(program, location, params);
+ }
+ }
+}
+
+GLint GL_APIENTRY GetUniformLocation(GLuint program, const GLchar *name)
+{
+ EVENT("(GLuint program = %u, const GLchar *name = 0x%0.8p)", program, name);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetUniformLocation>(program, name);
+
+ if (context->skipValidation() || ValidateGetUniformLocation(context, program, name))
+ {
+ return context->getUniformLocation(program, name);
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::GetUniformLocation, GLint>();
+}
+
+void GL_APIENTRY GetVertexAttribfv(GLuint index, GLenum pname, GLfloat *params)
+{
+ EVENT("(GLuint index = %u, GLenum pname = 0x%X, GLfloat *params = 0x%0.8p)", index, pname,
+ params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetVertexAttribfv>(index, pname, params);
+
+ if (context->skipValidation() || ValidateGetVertexAttribfv(context, index, pname, params))
+ {
+ context->getVertexAttribfv(index, pname, params);
+ }
+ }
+}
+
+void GL_APIENTRY GetVertexAttribiv(GLuint index, GLenum pname, GLint *params)
+{
+ EVENT("(GLuint index = %u, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", index, pname,
+ params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetVertexAttribiv>(index, pname, params);
+
+ if (context->skipValidation() || ValidateGetVertexAttribiv(context, index, pname, params))
+ {
+ context->getVertexAttribiv(index, pname, params);
+ }
+ }
+}
+
+void GL_APIENTRY GetVertexAttribPointerv(GLuint index, GLenum pname, void **pointer)
+{
+ EVENT("(GLuint index = %u, GLenum pname = 0x%X, void **pointer = 0x%0.8p)", index, pname,
+ pointer);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetVertexAttribPointerv>(index, pname, pointer);
+
+ if (context->skipValidation() ||
+ ValidateGetVertexAttribPointerv(context, index, pname, pointer))
+ {
+ context->getVertexAttribPointerv(index, pname, pointer);
+ }
+ }
+}
+
+void GL_APIENTRY Hint(GLenum target, GLenum mode)
+{
+ EVENT("(GLenum target = 0x%X, GLenum mode = 0x%X)", target, mode);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Hint>(target, mode);
+
+ if (context->skipValidation() || ValidateHint(context, target, mode))
+ {
+ context->hint(target, mode);
+ }
+ }
+}
+
+GLboolean GL_APIENTRY IsBuffer(GLuint buffer)
+{
+ EVENT("(GLuint buffer = %u)", buffer);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::IsBuffer>(buffer);
+
+ if (context->skipValidation() || ValidateIsBuffer(context, buffer))
+ {
+ return context->isBuffer(buffer);
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::IsBuffer, GLboolean>();
+}
+
+GLboolean GL_APIENTRY IsEnabled(GLenum cap)
+{
+ EVENT("(GLenum cap = 0x%X)", cap);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::IsEnabled>(cap);
+
+ if (context->skipValidation() || ValidateIsEnabled(context, cap))
+ {
+ return context->isEnabled(cap);
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::IsEnabled, GLboolean>();
+}
+
+GLboolean GL_APIENTRY IsFramebuffer(GLuint framebuffer)
+{
+ EVENT("(GLuint framebuffer = %u)", framebuffer);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::IsFramebuffer>(framebuffer);
+
+ if (context->skipValidation() || ValidateIsFramebuffer(context, framebuffer))
+ {
+ return context->isFramebuffer(framebuffer);
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::IsFramebuffer, GLboolean>();
+}
+
+GLboolean GL_APIENTRY IsProgram(GLuint program)
+{
+ EVENT("(GLuint program = %u)", program);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::IsProgram>(program);
+
+ if (context->skipValidation() || ValidateIsProgram(context, program))
+ {
+ return context->isProgram(program);
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::IsProgram, GLboolean>();
+}
+
+GLboolean GL_APIENTRY IsRenderbuffer(GLuint renderbuffer)
+{
+ EVENT("(GLuint renderbuffer = %u)", renderbuffer);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::IsRenderbuffer>(renderbuffer);
+
+ if (context->skipValidation() || ValidateIsRenderbuffer(context, renderbuffer))
+ {
+ return context->isRenderbuffer(renderbuffer);
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::IsRenderbuffer, GLboolean>();
+}
+
+GLboolean GL_APIENTRY IsShader(GLuint shader)
+{
+ EVENT("(GLuint shader = %u)", shader);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::IsShader>(shader);
+
+ if (context->skipValidation() || ValidateIsShader(context, shader))
+ {
+ return context->isShader(shader);
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::IsShader, GLboolean>();
+}
+
+GLboolean GL_APIENTRY IsTexture(GLuint texture)
+{
+ EVENT("(GLuint texture = %u)", texture);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::IsTexture>(texture);
+
+ if (context->skipValidation() || ValidateIsTexture(context, texture))
+ {
+ return context->isTexture(texture);
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::IsTexture, GLboolean>();
+}
+
+void GL_APIENTRY LineWidth(GLfloat width)
+{
+ EVENT("(GLfloat width = %f)", width);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::LineWidth>(width);
+
+ if (context->skipValidation() || ValidateLineWidth(context, width))
+ {
+ context->lineWidth(width);
+ }
+ }
+}
+
+void GL_APIENTRY LinkProgram(GLuint program)
+{
+ EVENT("(GLuint program = %u)", program);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::LinkProgram>(program);
+
+ if (context->skipValidation() || ValidateLinkProgram(context, program))
+ {
+ context->linkProgram(program);
+ }
+ }
+}
+
+void GL_APIENTRY PixelStorei(GLenum pname, GLint param)
+{
+ EVENT("(GLenum pname = 0x%X, GLint param = %d)", pname, param);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::PixelStorei>(pname, param);
+
+ if (context->skipValidation() || ValidatePixelStorei(context, pname, param))
+ {
+ context->pixelStorei(pname, param);
+ }
+ }
+}
+
+void GL_APIENTRY PolygonOffset(GLfloat factor, GLfloat units)
+{
+ EVENT("(GLfloat factor = %f, GLfloat units = %f)", factor, units);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::PolygonOffset>(factor, units);
+
+ if (context->skipValidation() || ValidatePolygonOffset(context, factor, units))
+ {
+ context->polygonOffset(factor, units);
+ }
+ }
+}
+
+void GL_APIENTRY ReadPixels(GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ void *pixels)
+{
+ EVENT(
+ "(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, GLenum format = "
+ "0x%X, GLenum type = 0x%X, void *pixels = 0x%0.8p)",
+ x, y, width, height, format, type, pixels);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ReadPixels>(x, y, width, height, format, type, pixels);
+
+ if (context->skipValidation() ||
+ ValidateReadPixels(context, x, y, width, height, format, type, pixels))
+ {
+ context->readPixels(x, y, width, height, format, type, pixels);
+ }
+ }
+}
+
+void GL_APIENTRY ReleaseShaderCompiler()
+{
+ EVENT("()");
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ReleaseShaderCompiler>();
+
+ if (context->skipValidation() || ValidateReleaseShaderCompiler(context))
+ {
+ context->releaseShaderCompiler();
+ }
+ }
+}
+
+void GL_APIENTRY RenderbufferStorage(GLenum target,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLenum internalformat = 0x%X, GLsizei width = %d, GLsizei height = "
+ "%d)",
+ target, internalformat, width, height);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::RenderbufferStorage>(target, internalformat, width,
+ height);
+
+ if (context->skipValidation() ||
+ ValidateRenderbufferStorage(context, target, internalformat, width, height))
+ {
+ context->renderbufferStorage(target, internalformat, width, height);
+ }
+ }
+}
+
+void GL_APIENTRY SampleCoverage(GLfloat value, GLboolean invert)
+{
+ EVENT("(GLfloat value = %f, GLboolean invert = %u)", value, invert);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::SampleCoverage>(value, invert);
+
+ if (context->skipValidation() || ValidateSampleCoverage(context, value, invert))
+ {
+ context->sampleCoverage(value, invert);
+ }
+ }
+}
+
+void GL_APIENTRY Scissor(GLint x, GLint y, GLsizei width, GLsizei height)
+{
+ EVENT("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)", x, y, width,
+ height);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Scissor>(x, y, width, height);
+
+ if (context->skipValidation() || ValidateScissor(context, x, y, width, height))
+ {
+ context->scissor(x, y, width, height);
+ }
+ }
+}
+
+void GL_APIENTRY ShaderBinary(GLsizei count,
+ const GLuint *shaders,
+ GLenum binaryformat,
+ const void *binary,
+ GLsizei length)
+{
+ EVENT(
+ "(GLsizei count = %d, const GLuint *shaders = 0x%0.8p, GLenum binaryformat = 0x%X, const "
+ "void *binary = 0x%0.8p, GLsizei length = %d)",
+ count, shaders, binaryformat, binary, length);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ShaderBinary>(count, shaders, binaryformat, binary,
+ length);
+
+ if (context->skipValidation() ||
+ ValidateShaderBinary(context, count, shaders, binaryformat, binary, length))
+ {
+ context->shaderBinary(count, shaders, binaryformat, binary, length);
+ }
+ }
+}
+
+void GL_APIENTRY ShaderSource(GLuint shader,
+ GLsizei count,
+ const GLchar *const *string,
+ const GLint *length)
+{
+ EVENT(
+ "(GLuint shader = %u, GLsizei count = %d, const GLchar *const*string = 0x%0.8p, const "
+ "GLint *length = 0x%0.8p)",
+ shader, count, string, length);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ShaderSource>(shader, count, string, length);
+
+ if (context->skipValidation() ||
+ ValidateShaderSource(context, shader, count, string, length))
+ {
+ context->shaderSource(shader, count, string, length);
+ }
+ }
+}
+
+void GL_APIENTRY StencilFunc(GLenum func, GLint ref, GLuint mask)
+{
+ EVENT("(GLenum func = 0x%X, GLint ref = %d, GLuint mask = %u)", func, ref, mask);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::StencilFunc>(func, ref, mask);
+
+ if (context->skipValidation() || ValidateStencilFunc(context, func, ref, mask))
+ {
+ context->stencilFunc(func, ref, mask);
+ }
+ }
+}
+
+void GL_APIENTRY StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
+{
+ EVENT("(GLenum face = 0x%X, GLenum func = 0x%X, GLint ref = %d, GLuint mask = %u)", face, func,
+ ref, mask);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::StencilFuncSeparate>(face, func, ref, mask);
+
+ if (context->skipValidation() ||
+ ValidateStencilFuncSeparate(context, face, func, ref, mask))
+ {
+ context->stencilFuncSeparate(face, func, ref, mask);
+ }
+ }
+}
+
+void GL_APIENTRY StencilMask(GLuint mask)
+{
+ EVENT("(GLuint mask = %u)", mask);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::StencilMask>(mask);
+
+ if (context->skipValidation() || ValidateStencilMask(context, mask))
+ {
+ context->stencilMask(mask);
+ }
+ }
+}
+
+void GL_APIENTRY StencilMaskSeparate(GLenum face, GLuint mask)
+{
+ EVENT("(GLenum face = 0x%X, GLuint mask = %u)", face, mask);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::StencilMaskSeparate>(face, mask);
+
+ if (context->skipValidation() || ValidateStencilMaskSeparate(context, face, mask))
+ {
+ context->stencilMaskSeparate(face, mask);
+ }
+ }
+}
+
+void GL_APIENTRY StencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+{
+ EVENT("(GLenum fail = 0x%X, GLenum zfail = 0x%X, GLenum zpass = 0x%X)", fail, zfail, zpass);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::StencilOp>(fail, zfail, zpass);
+
+ if (context->skipValidation() || ValidateStencilOp(context, fail, zfail, zpass))
+ {
+ context->stencilOp(fail, zfail, zpass);
+ }
+ }
+}
+
+void GL_APIENTRY StencilOpSeparate(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass)
+{
+ EVENT("(GLenum face = 0x%X, GLenum sfail = 0x%X, GLenum dpfail = 0x%X, GLenum dppass = 0x%X)",
+ face, sfail, dpfail, dppass);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::StencilOpSeparate>(face, sfail, dpfail, dppass);
+
+ if (context->skipValidation() ||
+ ValidateStencilOpSeparate(context, face, sfail, dpfail, dppass))
+ {
+ context->stencilOpSeparate(face, sfail, dpfail, dppass);
+ }
+ }
+}
+
+void GL_APIENTRY TexImage2D(GLenum target,
+ GLint level,
+ GLint internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLint border,
+ GLenum format,
+ GLenum type,
+ const void *pixels)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLint level = %d, GLint internalformat = %d, GLsizei width = %d, "
+ "GLsizei height = %d, GLint border = %d, GLenum format = 0x%X, GLenum type = 0x%X, const "
+ "void *pixels = 0x%0.8p)",
+ target, level, internalformat, width, height, border, format, type, pixels);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::TexImage2D>(target, level, internalformat, width, height,
+ border, format, type, pixels);
+
+ if (context->skipValidation() ||
+ ValidateTexImage2D(context, target, level, internalformat, width, height, border,
+ format, type, pixels))
+ {
+ context->texImage2D(target, level, internalformat, width, height, border, format, type,
+ pixels);
+ }
+ }
+}
+
+void GL_APIENTRY TexParameterf(GLenum target, GLenum pname, GLfloat param)
+{
+ EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLfloat param = %f)", target, pname, param);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::TexParameterf>(target, pname, param);
+
+ if (context->skipValidation() || ValidateTexParameterf(context, target, pname, param))
+ {
+ context->texParameterf(target, pname, param);
+ }
+ }
+}
+
+void GL_APIENTRY TexParameterfv(GLenum target, GLenum pname, const GLfloat *params)
+{
+ EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, const GLfloat *params = 0x%0.8p)", target,
+ pname, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::TexParameterfv>(target, pname, params);
+
+ if (context->skipValidation() || ValidateTexParameterfv(context, target, pname, params))
+ {
+ context->texParameterfv(target, pname, params);
+ }
+ }
+}
+
+void GL_APIENTRY TexParameteri(GLenum target, GLenum pname, GLint param)
+{
+ EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint param = %d)", target, pname, param);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::TexParameteri>(target, pname, param);
+
+ if (context->skipValidation() || ValidateTexParameteri(context, target, pname, param))
+ {
+ context->texParameteri(target, pname, param);
+ }
+ }
+}
+
+void GL_APIENTRY TexParameteriv(GLenum target, GLenum pname, const GLint *params)
+{
+ EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, const GLint *params = 0x%0.8p)", target,
+ pname, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::TexParameteriv>(target, pname, params);
+
+ if (context->skipValidation() || ValidateTexParameteriv(context, target, pname, params))
+ {
+ context->texParameteriv(target, pname, params);
+ }
+ }
+}
+
+void GL_APIENTRY TexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ const void *pixels)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, GLsizei "
+ "width = %d, GLsizei height = %d, GLenum format = 0x%X, GLenum type = 0x%X, const void "
+ "*pixels = 0x%0.8p)",
+ target, level, xoffset, yoffset, width, height, format, type, pixels);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::TexSubImage2D>(target, level, xoffset, yoffset, width,
+ height, format, type, pixels);
+
+ if (context->skipValidation() ||
+ ValidateTexSubImage2D(context, target, level, xoffset, yoffset, width, height, format,
+ type, pixels))
+ {
+ context->texSubImage2D(target, level, xoffset, yoffset, width, height, format, type,
+ pixels);
+ }
+ }
+}
+
+void GL_APIENTRY Uniform1f(GLint location, GLfloat v0)
+{
+ EVENT("(GLint location = %d, GLfloat v0 = %f)", location, v0);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Uniform1f>(location, v0);
+
+ if (context->skipValidation() || ValidateUniform1f(context, location, v0))
+ {
+ context->uniform1f(location, v0);
+ }
+ }
+}
+
+void GL_APIENTRY Uniform1fv(GLint location, GLsizei count, const GLfloat *value)
+{
+ EVENT("(GLint location = %d, GLsizei count = %d, const GLfloat *value = 0x%0.8p)", location,
+ count, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Uniform1fv>(location, count, value);
+
+ if (context->skipValidation() || ValidateUniform1fv(context, location, count, value))
+ {
+ context->uniform1fv(location, count, value);
+ }
+ }
+}
+
+void GL_APIENTRY Uniform1i(GLint location, GLint v0)
+{
+ EVENT("(GLint location = %d, GLint v0 = %d)", location, v0);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Uniform1i>(location, v0);
+
+ if (context->skipValidation() || ValidateUniform1i(context, location, v0))
+ {
+ context->uniform1i(location, v0);
+ }
+ }
+}
+
+void GL_APIENTRY Uniform1iv(GLint location, GLsizei count, const GLint *value)
+{
+ EVENT("(GLint location = %d, GLsizei count = %d, const GLint *value = 0x%0.8p)", location,
+ count, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Uniform1iv>(location, count, value);
+
+ if (context->skipValidation() || ValidateUniform1iv(context, location, count, value))
+ {
+ context->uniform1iv(location, count, value);
+ }
+ }
+}
+
+void GL_APIENTRY Uniform2f(GLint location, GLfloat v0, GLfloat v1)
+{
+ EVENT("(GLint location = %d, GLfloat v0 = %f, GLfloat v1 = %f)", location, v0, v1);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Uniform2f>(location, v0, v1);
+
+ if (context->skipValidation() || ValidateUniform2f(context, location, v0, v1))
+ {
+ context->uniform2f(location, v0, v1);
+ }
+ }
+}
+
+void GL_APIENTRY Uniform2fv(GLint location, GLsizei count, const GLfloat *value)
+{
+ EVENT("(GLint location = %d, GLsizei count = %d, const GLfloat *value = 0x%0.8p)", location,
+ count, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Uniform2fv>(location, count, value);
+
+ if (context->skipValidation() || ValidateUniform2fv(context, location, count, value))
+ {
+ context->uniform2fv(location, count, value);
+ }
+ }
+}
+
+void GL_APIENTRY Uniform2i(GLint location, GLint v0, GLint v1)
+{
+ EVENT("(GLint location = %d, GLint v0 = %d, GLint v1 = %d)", location, v0, v1);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Uniform2i>(location, v0, v1);
+
+ if (context->skipValidation() || ValidateUniform2i(context, location, v0, v1))
+ {
+ context->uniform2i(location, v0, v1);
+ }
+ }
+}
+
+void GL_APIENTRY Uniform2iv(GLint location, GLsizei count, const GLint *value)
+{
+ EVENT("(GLint location = %d, GLsizei count = %d, const GLint *value = 0x%0.8p)", location,
+ count, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Uniform2iv>(location, count, value);
+
+ if (context->skipValidation() || ValidateUniform2iv(context, location, count, value))
+ {
+ context->uniform2iv(location, count, value);
+ }
+ }
+}
+
+void GL_APIENTRY Uniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
+{
+ EVENT("(GLint location = %d, GLfloat v0 = %f, GLfloat v1 = %f, GLfloat v2 = %f)", location, v0,
+ v1, v2);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Uniform3f>(location, v0, v1, v2);
+
+ if (context->skipValidation() || ValidateUniform3f(context, location, v0, v1, v2))
+ {
+ context->uniform3f(location, v0, v1, v2);
+ }
+ }
+}
+
+void GL_APIENTRY Uniform3fv(GLint location, GLsizei count, const GLfloat *value)
+{
+ EVENT("(GLint location = %d, GLsizei count = %d, const GLfloat *value = 0x%0.8p)", location,
+ count, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Uniform3fv>(location, count, value);
+
+ if (context->skipValidation() || ValidateUniform3fv(context, location, count, value))
+ {
+ context->uniform3fv(location, count, value);
+ }
+ }
+}
+
+void GL_APIENTRY Uniform3i(GLint location, GLint v0, GLint v1, GLint v2)
+{
+ EVENT("(GLint location = %d, GLint v0 = %d, GLint v1 = %d, GLint v2 = %d)", location, v0, v1,
+ v2);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Uniform3i>(location, v0, v1, v2);
+
+ if (context->skipValidation() || ValidateUniform3i(context, location, v0, v1, v2))
+ {
+ context->uniform3i(location, v0, v1, v2);
+ }
+ }
+}
+
+void GL_APIENTRY Uniform3iv(GLint location, GLsizei count, const GLint *value)
+{
+ EVENT("(GLint location = %d, GLsizei count = %d, const GLint *value = 0x%0.8p)", location,
+ count, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Uniform3iv>(location, count, value);
+
+ if (context->skipValidation() || ValidateUniform3iv(context, location, count, value))
+ {
+ context->uniform3iv(location, count, value);
+ }
+ }
+}
+
+void GL_APIENTRY Uniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
+{
+ EVENT(
+ "(GLint location = %d, GLfloat v0 = %f, GLfloat v1 = %f, GLfloat v2 = %f, GLfloat v3 = %f)",
+ location, v0, v1, v2, v3);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Uniform4f>(location, v0, v1, v2, v3);
+
+ if (context->skipValidation() || ValidateUniform4f(context, location, v0, v1, v2, v3))
+ {
+ context->uniform4f(location, v0, v1, v2, v3);
+ }
+ }
+}
+
+void GL_APIENTRY Uniform4fv(GLint location, GLsizei count, const GLfloat *value)
+{
+ EVENT("(GLint location = %d, GLsizei count = %d, const GLfloat *value = 0x%0.8p)", location,
+ count, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Uniform4fv>(location, count, value);
+
+ if (context->skipValidation() || ValidateUniform4fv(context, location, count, value))
+ {
+ context->uniform4fv(location, count, value);
+ }
+ }
+}
+
+void GL_APIENTRY Uniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
+{
+ EVENT("(GLint location = %d, GLint v0 = %d, GLint v1 = %d, GLint v2 = %d, GLint v3 = %d)",
+ location, v0, v1, v2, v3);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Uniform4i>(location, v0, v1, v2, v3);
+
+ if (context->skipValidation() || ValidateUniform4i(context, location, v0, v1, v2, v3))
+ {
+ context->uniform4i(location, v0, v1, v2, v3);
+ }
+ }
+}
+
+void GL_APIENTRY Uniform4iv(GLint location, GLsizei count, const GLint *value)
+{
+ EVENT("(GLint location = %d, GLsizei count = %d, const GLint *value = 0x%0.8p)", location,
+ count, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Uniform4iv>(location, count, value);
+
+ if (context->skipValidation() || ValidateUniform4iv(context, location, count, value))
+ {
+ context->uniform4iv(location, count, value);
+ }
+ }
+}
+
+void GL_APIENTRY UniformMatrix2fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
+{
+ EVENT(
+ "(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat *value "
+ "= 0x%0.8p)",
+ location, count, transpose, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::UniformMatrix2fv>(location, count, transpose, value);
+
+ if (context->skipValidation() ||
+ ValidateUniformMatrix2fv(context, location, count, transpose, value))
+ {
+ context->uniformMatrix2fv(location, count, transpose, value);
+ }
+ }
+}
+
+void GL_APIENTRY UniformMatrix3fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
+{
+ EVENT(
+ "(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat *value "
+ "= 0x%0.8p)",
+ location, count, transpose, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::UniformMatrix3fv>(location, count, transpose, value);
+
+ if (context->skipValidation() ||
+ ValidateUniformMatrix3fv(context, location, count, transpose, value))
+ {
+ context->uniformMatrix3fv(location, count, transpose, value);
+ }
+ }
+}
+
+void GL_APIENTRY UniformMatrix4fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
+{
+ EVENT(
+ "(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat *value "
+ "= 0x%0.8p)",
+ location, count, transpose, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::UniformMatrix4fv>(location, count, transpose, value);
+
+ if (context->skipValidation() ||
+ ValidateUniformMatrix4fv(context, location, count, transpose, value))
+ {
+ context->uniformMatrix4fv(location, count, transpose, value);
+ }
+ }
+}
+
+void GL_APIENTRY UseProgram(GLuint program)
+{
+ EVENT("(GLuint program = %u)", program);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::UseProgram>(program);
+
+ if (context->skipValidation() || ValidateUseProgram(context, program))
+ {
+ context->useProgram(program);
+ }
+ }
+}
+
+void GL_APIENTRY ValidateProgram(GLuint program)
+{
+ EVENT("(GLuint program = %u)", program);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ValidateProgram>(program);
+
+ if (context->skipValidation() || ValidateValidateProgram(context, program))
+ {
+ context->validateProgram(program);
+ }
+ }
+}
+
+void GL_APIENTRY VertexAttrib1f(GLuint index, GLfloat x)
+{
+ EVENT("(GLuint index = %u, GLfloat x = %f)", index, x);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::VertexAttrib1f>(index, x);
+
+ if (context->skipValidation() || ValidateVertexAttrib1f(context, index, x))
+ {
+ context->vertexAttrib1f(index, x);
+ }
+ }
+}
+
+void GL_APIENTRY VertexAttrib1fv(GLuint index, const GLfloat *v)
+{
+ EVENT("(GLuint index = %u, const GLfloat *v = 0x%0.8p)", index, v);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::VertexAttrib1fv>(index, v);
+
+ if (context->skipValidation() || ValidateVertexAttrib1fv(context, index, v))
+ {
+ context->vertexAttrib1fv(index, v);
+ }
+ }
+}
+
+void GL_APIENTRY VertexAttrib2f(GLuint index, GLfloat x, GLfloat y)
+{
+ EVENT("(GLuint index = %u, GLfloat x = %f, GLfloat y = %f)", index, x, y);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::VertexAttrib2f>(index, x, y);
+
+ if (context->skipValidation() || ValidateVertexAttrib2f(context, index, x, y))
+ {
+ context->vertexAttrib2f(index, x, y);
+ }
+ }
+}
+
+void GL_APIENTRY VertexAttrib2fv(GLuint index, const GLfloat *v)
+{
+ EVENT("(GLuint index = %u, const GLfloat *v = 0x%0.8p)", index, v);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::VertexAttrib2fv>(index, v);
+
+ if (context->skipValidation() || ValidateVertexAttrib2fv(context, index, v))
+ {
+ context->vertexAttrib2fv(index, v);
+ }
+ }
+}
+
+void GL_APIENTRY VertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z)
+{
+ EVENT("(GLuint index = %u, GLfloat x = %f, GLfloat y = %f, GLfloat z = %f)", index, x, y, z);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::VertexAttrib3f>(index, x, y, z);
+
+ if (context->skipValidation() || ValidateVertexAttrib3f(context, index, x, y, z))
+ {
+ context->vertexAttrib3f(index, x, y, z);
+ }
+ }
+}
+
+void GL_APIENTRY VertexAttrib3fv(GLuint index, const GLfloat *v)
+{
+ EVENT("(GLuint index = %u, const GLfloat *v = 0x%0.8p)", index, v);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::VertexAttrib3fv>(index, v);
+
+ if (context->skipValidation() || ValidateVertexAttrib3fv(context, index, v))
+ {
+ context->vertexAttrib3fv(index, v);
+ }
+ }
+}
+
+void GL_APIENTRY VertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+{
+ EVENT("(GLuint index = %u, GLfloat x = %f, GLfloat y = %f, GLfloat z = %f, GLfloat w = %f)",
+ index, x, y, z, w);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::VertexAttrib4f>(index, x, y, z, w);
+
+ if (context->skipValidation() || ValidateVertexAttrib4f(context, index, x, y, z, w))
+ {
+ context->vertexAttrib4f(index, x, y, z, w);
+ }
+ }
+}
+
+void GL_APIENTRY VertexAttrib4fv(GLuint index, const GLfloat *v)
+{
+ EVENT("(GLuint index = %u, const GLfloat *v = 0x%0.8p)", index, v);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::VertexAttrib4fv>(index, v);
+
+ if (context->skipValidation() || ValidateVertexAttrib4fv(context, index, v))
+ {
+ context->vertexAttrib4fv(index, v);
+ }
+ }
+}
+
+void GL_APIENTRY VertexAttribPointer(GLuint index,
+ GLint size,
+ GLenum type,
+ GLboolean normalized,
+ GLsizei stride,
+ const void *pointer)
+{
+ EVENT(
+ "(GLuint index = %u, GLint size = %d, GLenum type = 0x%X, GLboolean normalized = %u, "
+ "GLsizei stride = %d, const void *pointer = 0x%0.8p)",
+ index, size, type, normalized, stride, pointer);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::VertexAttribPointer>(index, size, type, normalized,
+ stride, pointer);
+
+ if (context->skipValidation() ||
+ ValidateVertexAttribPointer(context, index, size, type, normalized, stride, pointer))
+ {
+ context->vertexAttribPointer(index, size, type, normalized, stride, pointer);
+ }
+ }
+}
+
+void GL_APIENTRY Viewport(GLint x, GLint y, GLsizei width, GLsizei height)
+{
+ EVENT("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)", x, y, width,
+ height);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Viewport>(x, y, width, height);
+
+ if (context->skipValidation() || ValidateViewport(context, x, y, width, height))
+ {
+ context->viewport(x, y, width, height);
+ }
+ }
+}
+} // namespace gl
diff --git a/src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0_autogen.h b/src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0_autogen.h
new file mode 100644
index 0000000000..7735b46fa4
--- /dev/null
+++ b/src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0_autogen.h
@@ -0,0 +1,297 @@
+// GENERATED FILE - DO NOT EDIT.
+// Generated by generate_entry_points.py using data from gl.xml.
+//
+// Copyright 2017 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.
+//
+// entry_points_gles_2_0_autogen.h:
+// Defines the GLES 2.0 entry points.
+
+#ifndef LIBGLESV2_ENTRYPOINTSGLES20_AUTOGEN_H_
+#define LIBGLESV2_ENTRYPOINTSGLES20_AUTOGEN_H_
+
+#include <GLES2/gl2.h>
+#include <export.h>
+
+namespace gl
+{
+ANGLE_EXPORT void GL_APIENTRY ActiveTexture(GLenum texture);
+ANGLE_EXPORT void GL_APIENTRY AttachShader(GLuint program, GLuint shader);
+ANGLE_EXPORT void GL_APIENTRY BindAttribLocation(GLuint program, GLuint index, const GLchar *name);
+ANGLE_EXPORT void GL_APIENTRY BindBuffer(GLenum target, GLuint buffer);
+ANGLE_EXPORT void GL_APIENTRY BindFramebuffer(GLenum target, GLuint framebuffer);
+ANGLE_EXPORT void GL_APIENTRY BindRenderbuffer(GLenum target, GLuint renderbuffer);
+ANGLE_EXPORT void GL_APIENTRY BindTexture(GLenum target, GLuint texture);
+ANGLE_EXPORT void GL_APIENTRY BlendColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+ANGLE_EXPORT void GL_APIENTRY BlendEquation(GLenum mode);
+ANGLE_EXPORT void GL_APIENTRY BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha);
+ANGLE_EXPORT void GL_APIENTRY BlendFunc(GLenum sfactor, GLenum dfactor);
+ANGLE_EXPORT void GL_APIENTRY BlendFuncSeparate(GLenum sfactorRGB,
+ GLenum dfactorRGB,
+ GLenum sfactorAlpha,
+ GLenum dfactorAlpha);
+ANGLE_EXPORT void GL_APIENTRY BufferData(GLenum target,
+ GLsizeiptr size,
+ const void *data,
+ GLenum usage);
+ANGLE_EXPORT void GL_APIENTRY BufferSubData(GLenum target,
+ GLintptr offset,
+ GLsizeiptr size,
+ const void *data);
+ANGLE_EXPORT GLenum GL_APIENTRY CheckFramebufferStatus(GLenum target);
+ANGLE_EXPORT void GL_APIENTRY Clear(GLbitfield mask);
+ANGLE_EXPORT void GL_APIENTRY ClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+ANGLE_EXPORT void GL_APIENTRY ClearDepthf(GLfloat d);
+ANGLE_EXPORT void GL_APIENTRY ClearStencil(GLint s);
+ANGLE_EXPORT void GL_APIENTRY ColorMask(GLboolean red,
+ GLboolean green,
+ GLboolean blue,
+ GLboolean alpha);
+ANGLE_EXPORT void GL_APIENTRY CompileShader(GLuint shader);
+ANGLE_EXPORT void GL_APIENTRY CompressedTexImage2D(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLint border,
+ GLsizei imageSize,
+ const void *data);
+ANGLE_EXPORT void GL_APIENTRY CompressedTexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLsizei imageSize,
+ const void *data);
+ANGLE_EXPORT void GL_APIENTRY CopyTexImage2D(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLint border);
+ANGLE_EXPORT void GL_APIENTRY CopyTexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height);
+ANGLE_EXPORT GLuint GL_APIENTRY CreateProgram();
+ANGLE_EXPORT GLuint GL_APIENTRY CreateShader(GLenum type);
+ANGLE_EXPORT void GL_APIENTRY CullFace(GLenum mode);
+ANGLE_EXPORT void GL_APIENTRY DeleteBuffers(GLsizei n, const GLuint *buffers);
+ANGLE_EXPORT void GL_APIENTRY DeleteFramebuffers(GLsizei n, const GLuint *framebuffers);
+ANGLE_EXPORT void GL_APIENTRY DeleteProgram(GLuint program);
+ANGLE_EXPORT void GL_APIENTRY DeleteRenderbuffers(GLsizei n, const GLuint *renderbuffers);
+ANGLE_EXPORT void GL_APIENTRY DeleteShader(GLuint shader);
+ANGLE_EXPORT void GL_APIENTRY DeleteTextures(GLsizei n, const GLuint *textures);
+ANGLE_EXPORT void GL_APIENTRY DepthFunc(GLenum func);
+ANGLE_EXPORT void GL_APIENTRY DepthMask(GLboolean flag);
+ANGLE_EXPORT void GL_APIENTRY DepthRangef(GLfloat n, GLfloat f);
+ANGLE_EXPORT void GL_APIENTRY DetachShader(GLuint program, GLuint shader);
+ANGLE_EXPORT void GL_APIENTRY Disable(GLenum cap);
+ANGLE_EXPORT void GL_APIENTRY DisableVertexAttribArray(GLuint index);
+ANGLE_EXPORT void GL_APIENTRY DrawArrays(GLenum mode, GLint first, GLsizei count);
+ANGLE_EXPORT void GL_APIENTRY DrawElements(GLenum mode,
+ GLsizei count,
+ GLenum type,
+ const void *indices);
+ANGLE_EXPORT void GL_APIENTRY Enable(GLenum cap);
+ANGLE_EXPORT void GL_APIENTRY EnableVertexAttribArray(GLuint index);
+ANGLE_EXPORT void GL_APIENTRY Finish();
+ANGLE_EXPORT void GL_APIENTRY Flush();
+ANGLE_EXPORT void GL_APIENTRY FramebufferRenderbuffer(GLenum target,
+ GLenum attachment,
+ GLenum renderbuffertarget,
+ GLuint renderbuffer);
+ANGLE_EXPORT void GL_APIENTRY FramebufferTexture2D(GLenum target,
+ GLenum attachment,
+ GLenum textarget,
+ GLuint texture,
+ GLint level);
+ANGLE_EXPORT void GL_APIENTRY FrontFace(GLenum mode);
+ANGLE_EXPORT void GL_APIENTRY GenBuffers(GLsizei n, GLuint *buffers);
+ANGLE_EXPORT void GL_APIENTRY GenerateMipmap(GLenum target);
+ANGLE_EXPORT void GL_APIENTRY GenFramebuffers(GLsizei n, GLuint *framebuffers);
+ANGLE_EXPORT void GL_APIENTRY GenRenderbuffers(GLsizei n, GLuint *renderbuffers);
+ANGLE_EXPORT void GL_APIENTRY GenTextures(GLsizei n, GLuint *textures);
+ANGLE_EXPORT void GL_APIENTRY GetActiveAttrib(GLuint program,
+ GLuint index,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *size,
+ GLenum *type,
+ GLchar *name);
+ANGLE_EXPORT void GL_APIENTRY GetActiveUniform(GLuint program,
+ GLuint index,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *size,
+ GLenum *type,
+ GLchar *name);
+ANGLE_EXPORT void GL_APIENTRY GetAttachedShaders(GLuint program,
+ GLsizei maxCount,
+ GLsizei *count,
+ GLuint *shaders);
+ANGLE_EXPORT GLint GL_APIENTRY GetAttribLocation(GLuint program, const GLchar *name);
+ANGLE_EXPORT void GL_APIENTRY GetBooleanv(GLenum pname, GLboolean *data);
+ANGLE_EXPORT void GL_APIENTRY GetBufferParameteriv(GLenum target, GLenum pname, GLint *params);
+ANGLE_EXPORT GLenum GL_APIENTRY GetError();
+ANGLE_EXPORT void GL_APIENTRY GetFloatv(GLenum pname, GLfloat *data);
+ANGLE_EXPORT void GL_APIENTRY GetFramebufferAttachmentParameteriv(GLenum target,
+ GLenum attachment,
+ GLenum pname,
+ GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetIntegerv(GLenum pname, GLint *data);
+ANGLE_EXPORT void GL_APIENTRY GetProgramiv(GLuint program, GLenum pname, GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetProgramInfoLog(GLuint program,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLchar *infoLog);
+ANGLE_EXPORT void GL_APIENTRY GetRenderbufferParameteriv(GLenum target,
+ GLenum pname,
+ GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetShaderiv(GLuint shader, GLenum pname, GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetShaderInfoLog(GLuint shader,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLchar *infoLog);
+ANGLE_EXPORT void GL_APIENTRY GetShaderPrecisionFormat(GLenum shadertype,
+ GLenum precisiontype,
+ GLint *range,
+ GLint *precision);
+ANGLE_EXPORT void GL_APIENTRY GetShaderSource(GLuint shader,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLchar *source);
+ANGLE_EXPORT const GLubyte *GL_APIENTRY GetString(GLenum name);
+ANGLE_EXPORT void GL_APIENTRY GetTexParameterfv(GLenum target, GLenum pname, GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetTexParameteriv(GLenum target, GLenum pname, GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetUniformfv(GLuint program, GLint location, GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetUniformiv(GLuint program, GLint location, GLint *params);
+ANGLE_EXPORT GLint GL_APIENTRY GetUniformLocation(GLuint program, const GLchar *name);
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribfv(GLuint index, GLenum pname, GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribiv(GLuint index, GLenum pname, GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribPointerv(GLuint index, GLenum pname, void **pointer);
+ANGLE_EXPORT void GL_APIENTRY Hint(GLenum target, GLenum mode);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsBuffer(GLuint buffer);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsEnabled(GLenum cap);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsFramebuffer(GLuint framebuffer);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsProgram(GLuint program);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsRenderbuffer(GLuint renderbuffer);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsShader(GLuint shader);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsTexture(GLuint texture);
+ANGLE_EXPORT void GL_APIENTRY LineWidth(GLfloat width);
+ANGLE_EXPORT void GL_APIENTRY LinkProgram(GLuint program);
+ANGLE_EXPORT void GL_APIENTRY PixelStorei(GLenum pname, GLint param);
+ANGLE_EXPORT void GL_APIENTRY PolygonOffset(GLfloat factor, GLfloat units);
+ANGLE_EXPORT void GL_APIENTRY ReadPixels(GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ void *pixels);
+ANGLE_EXPORT void GL_APIENTRY ReleaseShaderCompiler();
+ANGLE_EXPORT void GL_APIENTRY RenderbufferStorage(GLenum target,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height);
+ANGLE_EXPORT void GL_APIENTRY SampleCoverage(GLfloat value, GLboolean invert);
+ANGLE_EXPORT void GL_APIENTRY Scissor(GLint x, GLint y, GLsizei width, GLsizei height);
+ANGLE_EXPORT void GL_APIENTRY ShaderBinary(GLsizei count,
+ const GLuint *shaders,
+ GLenum binaryformat,
+ const void *binary,
+ GLsizei length);
+ANGLE_EXPORT void GL_APIENTRY ShaderSource(GLuint shader,
+ GLsizei count,
+ const GLchar *const *string,
+ const GLint *length);
+ANGLE_EXPORT void GL_APIENTRY StencilFunc(GLenum func, GLint ref, GLuint mask);
+ANGLE_EXPORT void GL_APIENTRY StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask);
+ANGLE_EXPORT void GL_APIENTRY StencilMask(GLuint mask);
+ANGLE_EXPORT void GL_APIENTRY StencilMaskSeparate(GLenum face, GLuint mask);
+ANGLE_EXPORT void GL_APIENTRY StencilOp(GLenum fail, GLenum zfail, GLenum zpass);
+ANGLE_EXPORT void GL_APIENTRY StencilOpSeparate(GLenum face,
+ GLenum sfail,
+ GLenum dpfail,
+ GLenum dppass);
+ANGLE_EXPORT void GL_APIENTRY TexImage2D(GLenum target,
+ GLint level,
+ GLint internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLint border,
+ GLenum format,
+ GLenum type,
+ const void *pixels);
+ANGLE_EXPORT void GL_APIENTRY TexParameterf(GLenum target, GLenum pname, GLfloat param);
+ANGLE_EXPORT void GL_APIENTRY TexParameterfv(GLenum target, GLenum pname, const GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY TexParameteri(GLenum target, GLenum pname, GLint param);
+ANGLE_EXPORT void GL_APIENTRY TexParameteriv(GLenum target, GLenum pname, const GLint *params);
+ANGLE_EXPORT void GL_APIENTRY TexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ const void *pixels);
+ANGLE_EXPORT void GL_APIENTRY Uniform1f(GLint location, GLfloat v0);
+ANGLE_EXPORT void GL_APIENTRY Uniform1fv(GLint location, GLsizei count, const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY Uniform1i(GLint location, GLint v0);
+ANGLE_EXPORT void GL_APIENTRY Uniform1iv(GLint location, GLsizei count, const GLint *value);
+ANGLE_EXPORT void GL_APIENTRY Uniform2f(GLint location, GLfloat v0, GLfloat v1);
+ANGLE_EXPORT void GL_APIENTRY Uniform2fv(GLint location, GLsizei count, const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY Uniform2i(GLint location, GLint v0, GLint v1);
+ANGLE_EXPORT void GL_APIENTRY Uniform2iv(GLint location, GLsizei count, const GLint *value);
+ANGLE_EXPORT void GL_APIENTRY Uniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+ANGLE_EXPORT void GL_APIENTRY Uniform3fv(GLint location, GLsizei count, const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY Uniform3i(GLint location, GLint v0, GLint v1, GLint v2);
+ANGLE_EXPORT void GL_APIENTRY Uniform3iv(GLint location, GLsizei count, const GLint *value);
+ANGLE_EXPORT void GL_APIENTRY
+Uniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+ANGLE_EXPORT void GL_APIENTRY Uniform4fv(GLint location, GLsizei count, const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY Uniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+ANGLE_EXPORT void GL_APIENTRY Uniform4iv(GLint location, GLsizei count, const GLint *value);
+ANGLE_EXPORT void GL_APIENTRY UniformMatrix2fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY UniformMatrix3fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY UniformMatrix4fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY UseProgram(GLuint program);
+ANGLE_EXPORT void GL_APIENTRY ValidateProgram(GLuint program);
+ANGLE_EXPORT void GL_APIENTRY VertexAttrib1f(GLuint index, GLfloat x);
+ANGLE_EXPORT void GL_APIENTRY VertexAttrib1fv(GLuint index, const GLfloat *v);
+ANGLE_EXPORT void GL_APIENTRY VertexAttrib2f(GLuint index, GLfloat x, GLfloat y);
+ANGLE_EXPORT void GL_APIENTRY VertexAttrib2fv(GLuint index, const GLfloat *v);
+ANGLE_EXPORT void GL_APIENTRY VertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z);
+ANGLE_EXPORT void GL_APIENTRY VertexAttrib3fv(GLuint index, const GLfloat *v);
+ANGLE_EXPORT void GL_APIENTRY
+VertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+ANGLE_EXPORT void GL_APIENTRY VertexAttrib4fv(GLuint index, const GLfloat *v);
+ANGLE_EXPORT void GL_APIENTRY VertexAttribPointer(GLuint index,
+ GLint size,
+ GLenum type,
+ GLboolean normalized,
+ GLsizei stride,
+ const void *pointer);
+ANGLE_EXPORT void GL_APIENTRY Viewport(GLint x, GLint y, GLsizei width, GLsizei height);
+} // namespace gl
+
+#endif // LIBGLESV2_ENTRYPOINTSGLES20_AUTOGEN_H_
diff --git a/src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0_ext.cpp b/src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0_ext.cpp
index 7df6fcb0cd..d4459ec287 100644
--- a/src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0_ext.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0_ext.cpp
@@ -12,14 +12,20 @@
#include "libANGLE/Buffer.h"
#include "libANGLE/Context.h"
#include "libANGLE/Error.h"
+#include "libANGLE/ErrorStrings.h"
#include "libANGLE/Fence.h"
#include "libANGLE/Framebuffer.h"
-#include "libANGLE/Shader.h"
#include "libANGLE/Query.h"
+#include "libANGLE/Shader.h"
+#include "libANGLE/Thread.h"
+#include "libANGLE/VertexArray.h"
+#include "libANGLE/queryconversions.h"
+#include "libANGLE/queryutils.h"
#include "libANGLE/validationES.h"
#include "libANGLE/validationES2.h"
#include "libANGLE/validationES3.h"
+#include "libANGLE/validationES31.h"
#include "common/debug.h"
#include "common/utilities.h"
@@ -27,6 +33,19 @@
namespace gl
{
+namespace
+{
+
+void SetRobustLengthParam(GLsizei *length, GLsizei value)
+{
+ if (length)
+ {
+ *length = value;
+ }
+}
+
+} // anonymous namespace
+
void GL_APIENTRY GenQueriesEXT(GLsizei n, GLuint *ids)
{
EVENT("(GLsizei n = %d, GLuint* ids = 0x%0.8p)", n, ids);
@@ -34,15 +53,12 @@ void GL_APIENTRY GenQueriesEXT(GLsizei n, GLuint *ids)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!ValidateGenQueriesEXT(context, n, ids))
+ if (!context->skipValidation() && !ValidateGenQueriesEXT(context, n, ids))
{
return;
}
- for (GLsizei i = 0; i < n; i++)
- {
- ids[i] = context->createQuery();
- }
+ context->genQueries(n, ids);
}
}
@@ -53,15 +69,12 @@ void GL_APIENTRY DeleteQueriesEXT(GLsizei n, const GLuint *ids)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!ValidateDeleteQueriesEXT(context, n, ids))
+ if (!context->skipValidation() && !ValidateDeleteQueriesEXT(context, n, ids))
{
return;
}
- for (int i = 0; i < n; i++)
- {
- context->deleteQuery(ids[i]);
- }
+ context->deleteQueries(n, ids);
}
}
@@ -72,7 +85,12 @@ GLboolean GL_APIENTRY IsQueryEXT(GLuint id)
Context *context = GetValidGlobalContext();
if (context)
{
- return (context->getQuery(id, false, GL_NONE) != NULL) ? GL_TRUE : GL_FALSE;
+ if (!context->skipValidation() && !ValidateIsQueryEXT(context, id))
+ {
+ return GL_FALSE;
+ }
+
+ return context->isQuery(id);
}
return GL_FALSE;
@@ -85,17 +103,12 @@ void GL_APIENTRY BeginQueryEXT(GLenum target, GLuint id)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!ValidateBeginQueryEXT(context, target, id))
+ if (!context->skipValidation() && !ValidateBeginQueryEXT(context, target, id))
{
return;
}
- Error error = context->beginQuery(target, id);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
+ context->beginQuery(target, id);
}
}
@@ -106,17 +119,12 @@ void GL_APIENTRY EndQueryEXT(GLenum target)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!ValidateEndQueryEXT(context, target))
+ if (!context->skipValidation() && !ValidateEndQueryEXT(context, target))
{
return;
}
- Error error = context->endQuery(target);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
+ context->endQuery(target);
}
}
@@ -127,17 +135,12 @@ void GL_APIENTRY QueryCounterEXT(GLuint id, GLenum target)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!ValidateQueryCounterEXT(context, id, target))
+ if (!context->skipValidation() && !ValidateQueryCounterEXT(context, id, target))
{
return;
}
- Error error = context->queryCounter(id, target);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
+ context->queryCounter(id, target);
}
}
@@ -170,12 +173,7 @@ void GL_APIENTRY GetQueryObjectivEXT(GLuint id, GLenum pname, GLint *params)
return;
}
- Error error = context->getQueryObjectiv(id, pname, params);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
+ context->getQueryObjectiv(id, pname, params);
}
}
@@ -191,12 +189,7 @@ void GL_APIENTRY GetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint *params)
return;
}
- Error error = context->getQueryObjectuiv(id, pname, params);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
+ context->getQueryObjectuiv(id, pname, params);
}
}
@@ -212,12 +205,7 @@ void GL_APIENTRY GetQueryObjecti64vEXT(GLuint id, GLenum pname, GLint64 *params)
return;
}
- Error error = context->getQueryObjecti64v(id, pname, params);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
+ context->getQueryObjecti64v(id, pname, params);
}
}
@@ -233,12 +221,7 @@ void GL_APIENTRY GetQueryObjectui64vEXT(GLuint id, GLenum pname, GLuint64 *param
return;
}
- Error error = context->getQueryObjectui64v(id, pname, params);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
+ context->getQueryObjectui64v(id, pname, params);
}
}
@@ -251,7 +234,7 @@ void GL_APIENTRY DeleteFencesNV(GLsizei n, const GLuint *fences)
{
if (n < 0)
{
- context->recordError(Error(GL_INVALID_VALUE));
+ context->handleError(InvalidValue());
return;
}
@@ -278,43 +261,34 @@ void GL_APIENTRY DrawArraysInstancedANGLE(GLenum mode,
return;
}
- Error error = context->drawArraysInstanced(mode, first, count, primcount);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
+ context->drawArraysInstanced(mode, first, count, primcount);
}
}
void GL_APIENTRY DrawElementsInstancedANGLE(GLenum mode,
GLsizei count,
GLenum type,
- const GLvoid *indices,
+ const void *indices,
GLsizei primcount)
{
EVENT(
- "(GLenum mode = 0x%X, GLsizei count = %d, GLenum type = 0x%X, const GLvoid* indices = "
+ "(GLenum mode = 0x%X, GLsizei count = %d, GLenum type = 0x%X, const void* indices = "
"0x%0.8p, GLsizei primcount = %d)",
mode, count, type, indices, primcount);
Context *context = GetValidGlobalContext();
if (context)
{
- IndexRange indexRange;
- if (!ValidateDrawElementsInstancedANGLE(context, mode, count, type, indices, primcount,
- &indexRange))
- {
- return;
- }
+ context->gatherParams<EntryPoint::DrawElementsInstancedANGLE>(mode, count, type, indices,
+ primcount);
- Error error =
- context->drawElementsInstanced(mode, count, type, indices, primcount, indexRange);
- if (error.isError())
+ if (!context->skipValidation() &&
+ !ValidateDrawElementsInstancedANGLE(context, mode, count, type, indices, primcount))
{
- context->recordError(error);
return;
}
+
+ context->drawElementsInstanced(mode, count, type, indices, primcount);
}
}
@@ -327,19 +301,19 @@ void GL_APIENTRY FinishFenceNV(GLuint fence)
{
FenceNV *fenceObject = context->getFenceNV(fence);
- if (fenceObject == NULL)
+ if (fenceObject == nullptr)
{
- context->recordError(Error(GL_INVALID_OPERATION));
+ context->handleError(InvalidOperation());
return;
}
if (fenceObject->isSet() != GL_TRUE)
{
- context->recordError(Error(GL_INVALID_OPERATION));
+ context->handleError(InvalidOperation());
return;
}
- fenceObject->finish();
+ context->handleError(fenceObject->finish());
}
}
@@ -352,7 +326,7 @@ void GL_APIENTRY GenFencesNV(GLsizei n, GLuint *fences)
{
if (n < 0)
{
- context->recordError(Error(GL_INVALID_VALUE));
+ context->handleError(InvalidValue());
return;
}
@@ -365,39 +339,41 @@ void GL_APIENTRY GenFencesNV(GLsizei n, GLuint *fences)
void GL_APIENTRY GetFenceivNV(GLuint fence, GLenum pname, GLint *params)
{
- EVENT("(GLuint fence = %d, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", fence, pname, params);
+ EVENT("(GLuint fence = %d, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", fence, pname,
+ params);
Context *context = GetValidGlobalContext();
if (context)
{
FenceNV *fenceObject = context->getFenceNV(fence);
- if (fenceObject == NULL)
+ if (fenceObject == nullptr)
{
- context->recordError(Error(GL_INVALID_OPERATION));
+ context->handleError(InvalidOperation());
return;
}
if (fenceObject->isSet() != GL_TRUE)
{
- context->recordError(Error(GL_INVALID_OPERATION));
+ context->handleError(InvalidOperation());
return;
}
switch (pname)
{
- case GL_FENCE_STATUS_NV:
+ case GL_FENCE_STATUS_NV:
{
// GL_NV_fence spec:
- // Once the status of a fence has been finished (via FinishFenceNV) or tested and the returned status is TRUE (via either TestFenceNV
- // or GetFenceivNV querying the FENCE_STATUS_NV), the status remains TRUE until the next SetFenceNV of the fence.
+ // Once the status of a fence has been finished (via FinishFenceNV) or tested and
+ // the returned status is TRUE (via either TestFenceNV or GetFenceivNV querying the
+ // FENCE_STATUS_NV), the status remains TRUE until the next SetFenceNV of the fence.
GLboolean status = GL_TRUE;
if (fenceObject->getStatus() != GL_TRUE)
{
Error error = fenceObject->test(&status);
if (error.isError())
{
- context->recordError(error);
+ context->handleError(error);
return;
}
}
@@ -405,15 +381,15 @@ void GL_APIENTRY GetFenceivNV(GLuint fence, GLenum pname, GLint *params)
break;
}
- case GL_FENCE_CONDITION_NV:
+ case GL_FENCE_CONDITION_NV:
{
*params = static_cast<GLint>(fenceObject->getCondition());
break;
}
- default:
+ default:
{
- context->recordError(Error(GL_INVALID_ENUM));
+ context->handleError(InvalidEnum());
return;
}
}
@@ -434,17 +410,22 @@ GLenum GL_APIENTRY GetGraphicsResetStatusEXT(void)
return GL_NO_ERROR;
}
-void GL_APIENTRY GetTranslatedShaderSourceANGLE(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source)
+void GL_APIENTRY GetTranslatedShaderSourceANGLE(GLuint shader,
+ GLsizei bufsize,
+ GLsizei *length,
+ GLchar *source)
{
- EVENT("(GLuint shader = %d, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, GLchar* source = 0x%0.8p)",
- shader, bufsize, length, source);
+ EVENT(
+ "(GLuint shader = %d, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, GLchar* source = "
+ "0x%0.8p)",
+ shader, bufsize, length, source);
Context *context = GetValidGlobalContext();
if (context)
{
if (bufsize < 0)
{
- context->recordError(Error(GL_INVALID_VALUE));
+ context->handleError(InvalidValue());
return;
}
@@ -452,18 +433,20 @@ void GL_APIENTRY GetTranslatedShaderSourceANGLE(GLuint shader, GLsizei bufsize,
if (!shaderObject)
{
- context->recordError(Error(GL_INVALID_OPERATION));
+ context->handleError(InvalidOperation());
return;
}
- shaderObject->getTranslatedSourceWithDebugInfo(bufsize, length, source);
+ shaderObject->getTranslatedSourceWithDebugInfo(context, bufsize, length, source);
}
}
-void GL_APIENTRY GetnUniformfvEXT(GLuint program, GLint location, GLsizei bufSize, GLfloat* params)
+void GL_APIENTRY GetnUniformfvEXT(GLuint program, GLint location, GLsizei bufSize, GLfloat *params)
{
- EVENT("(GLuint program = %d, GLint location = %d, GLsizei bufSize = %d, GLfloat* params = 0x%0.8p)",
- program, location, bufSize, params);
+ EVENT(
+ "(GLuint program = %d, GLint location = %d, GLsizei bufSize = %d, GLfloat* params = "
+ "0x%0.8p)",
+ program, location, bufSize, params);
Context *context = GetValidGlobalContext();
if (context)
@@ -476,14 +459,15 @@ void GL_APIENTRY GetnUniformfvEXT(GLuint program, GLint location, GLsizei bufSiz
Program *programObject = context->getProgram(program);
ASSERT(programObject);
- programObject->getUniformfv(location, params);
+ programObject->getUniformfv(context, location, params);
}
}
-void GL_APIENTRY GetnUniformivEXT(GLuint program, GLint location, GLsizei bufSize, GLint* params)
+void GL_APIENTRY GetnUniformivEXT(GLuint program, GLint location, GLsizei bufSize, GLint *params)
{
- EVENT("(GLuint program = %d, GLint location = %d, GLsizei bufSize = %d, GLint* params = 0x%0.8p)",
- program, location, bufSize, params);
+ EVENT(
+ "(GLuint program = %d, GLint location = %d, GLsizei bufSize = %d, GLint* params = 0x%0.8p)",
+ program, location, bufSize, params);
Context *context = GetValidGlobalContext();
if (context)
@@ -496,7 +480,7 @@ void GL_APIENTRY GetnUniformivEXT(GLuint program, GLint location, GLsizei bufSiz
Program *programObject = context->getProgram(program);
ASSERT(programObject);
- programObject->getUniformiv(location, params);
+ programObject->getUniformiv(context, location, params);
}
}
@@ -509,26 +493,33 @@ GLboolean GL_APIENTRY IsFenceNV(GLuint fence)
{
FenceNV *fenceObject = context->getFenceNV(fence);
- if (fenceObject == NULL)
+ if (fenceObject == nullptr)
{
return GL_FALSE;
}
// GL_NV_fence spec:
- // A name returned by GenFencesNV, but not yet set via SetFenceNV, is not the name of an existing fence.
+ // A name returned by GenFencesNV, but not yet set via SetFenceNV, is not the name of an
+ // existing fence.
return fenceObject->isSet();
}
return GL_FALSE;
}
-void GL_APIENTRY ReadnPixelsEXT(GLint x, GLint y, GLsizei width, GLsizei height,
- GLenum format, GLenum type, GLsizei bufSize,
- GLvoid *data)
+void GL_APIENTRY ReadnPixelsEXT(GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ GLsizei bufSize,
+ void *data)
{
- EVENT("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, "
- "GLenum format = 0x%X, GLenum type = 0x%X, GLsizei bufSize = 0x%d, GLvoid *data = 0x%0.8p)",
- x, y, width, height, format, type, bufSize, data);
+ EVENT(
+ "(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, "
+ "GLenum format = 0x%X, GLenum type = 0x%X, GLsizei bufSize = 0x%d, void *data = 0x%0.8p)",
+ x, y, width, height, format, type, bufSize, data);
Context *context = GetValidGlobalContext();
if (context)
@@ -543,27 +534,28 @@ void GL_APIENTRY ReadnPixelsEXT(GLint x, GLint y, GLsizei width, GLsizei height,
}
}
-void GL_APIENTRY RenderbufferStorageMultisampleANGLE(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
+void GL_APIENTRY RenderbufferStorageMultisampleANGLE(GLenum target,
+ GLsizei samples,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height)
{
- EVENT("(GLenum target = 0x%X, GLsizei samples = %d, GLenum internalformat = 0x%X, GLsizei width = %d, GLsizei height = %d)",
+ EVENT(
+ "(GLenum target = 0x%X, GLsizei samples = %d, GLenum internalformat = 0x%X, GLsizei width "
+ "= %d, GLsizei height = %d)",
target, samples, internalformat, width, height);
Context *context = GetValidGlobalContext();
if (context)
{
- if (!ValidateRenderbufferStorageParametersANGLE(context, target, samples, internalformat,
- width, height))
+ if (!context->skipValidation() &&
+ !ValidateRenderbufferStorageMultisampleANGLE(context, target, samples, internalformat,
+ width, height))
{
return;
}
- Renderbuffer *renderbuffer = context->getState().getCurrentRenderbuffer();
- Error error = renderbuffer->setStorageMultisample(samples, internalformat, width, height);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
+ context->renderbufferStorageMultisample(target, samples, internalformat, width, height);
}
}
@@ -576,22 +568,22 @@ void GL_APIENTRY SetFenceNV(GLuint fence, GLenum condition)
{
if (condition != GL_ALL_COMPLETED_NV)
{
- context->recordError(Error(GL_INVALID_ENUM));
+ context->handleError(InvalidEnum());
return;
}
FenceNV *fenceObject = context->getFenceNV(fence);
- if (fenceObject == NULL)
+ if (fenceObject == nullptr)
{
- context->recordError(Error(GL_INVALID_OPERATION));
+ context->handleError(InvalidOperation());
return;
}
Error error = fenceObject->set(condition);
if (error.isError())
{
- context->recordError(error);
+ context->handleError(error);
return;
}
}
@@ -606,15 +598,15 @@ GLboolean GL_APIENTRY TestFenceNV(GLuint fence)
{
FenceNV *fenceObject = context->getFenceNV(fence);
- if (fenceObject == NULL)
+ if (fenceObject == nullptr)
{
- context->recordError(Error(GL_INVALID_OPERATION));
+ context->handleError(InvalidOperation());
return GL_TRUE;
}
if (fenceObject->isSet() != GL_TRUE)
{
- context->recordError(Error(GL_INVALID_OPERATION));
+ context->handleError(InvalidOperation());
return GL_TRUE;
}
@@ -622,7 +614,7 @@ GLboolean GL_APIENTRY TestFenceNV(GLuint fence)
Error error = fenceObject->test(&result);
if (error.isError())
{
- context->recordError(error);
+ context->handleError(error);
return GL_TRUE;
}
@@ -632,41 +624,38 @@ GLboolean GL_APIENTRY TestFenceNV(GLuint fence)
return GL_TRUE;
}
-void GL_APIENTRY TexStorage2DEXT(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
+void GL_APIENTRY
+TexStorage2DEXT(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
{
- EVENT("(GLenum target = 0x%X, GLsizei levels = %d, GLenum internalformat = 0x%X, GLsizei width = %d, GLsizei height = %d)",
- target, levels, internalformat, width, height);
+ EVENT(
+ "(GLenum target = 0x%X, GLsizei levels = %d, GLenum internalformat = 0x%X, GLsizei width = "
+ "%d, GLsizei height = %d)",
+ target, levels, internalformat, width, height);
Context *context = GetValidGlobalContext();
if (context)
{
if (!context->getExtensions().textureStorage)
{
- context->recordError(Error(GL_INVALID_OPERATION));
+ context->handleError(InvalidOperation());
return;
}
- if (context->getClientVersion() < 3 &&
- !ValidateES2TexStorageParameters(context, target, levels, internalformat, width, height))
+ if (context->getClientMajorVersion() < 3 &&
+ !ValidateES2TexStorageParameters(context, target, levels, internalformat, width,
+ height))
{
return;
}
- if (context->getClientVersion() >= 3 &&
+ if (context->getClientMajorVersion() >= 3 &&
!ValidateES3TexStorage2DParameters(context, target, levels, internalformat, width,
height, 1))
{
return;
}
- Extents size(width, height, 1);
- Texture *texture = context->getTargetTexture(target);
- Error error = texture->setStorage(target, levels, internalformat, size);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
+ context->texStorage2D(target, levels, internalformat, width, height);
}
}
@@ -677,9 +666,15 @@ void GL_APIENTRY VertexAttribDivisorANGLE(GLuint index, GLuint divisor)
Context *context = GetValidGlobalContext();
if (context)
{
+ if (!context->getExtensions().instancedArrays)
+ {
+ ANGLE_VALIDATION_ERR(context, InvalidOperation(), ExtensionNotEnabled);
+ return;
+ }
+
if (index >= MAX_VERTEX_ATTRIBS)
{
- context->recordError(Error(GL_INVALID_VALUE));
+ context->handleError(InvalidValue());
return;
}
@@ -687,28 +682,41 @@ void GL_APIENTRY VertexAttribDivisorANGLE(GLuint index, GLuint divisor)
{
if (index == 0 && divisor != 0)
{
- const char *errorMessage = "The current context doesn't support setting a non-zero divisor on the attribute with index zero. "
- "Please reorder the attributes in your vertex shader so that attribute zero can have a zero divisor.";
- context->recordError(Error(GL_INVALID_OPERATION, errorMessage));
+ const char *errorMessage =
+ "The current context doesn't support setting a non-zero divisor on the "
+ "attribute with index zero. "
+ "Please reorder the attributes in your vertex shader so that attribute zero "
+ "can have a zero divisor.";
+ context->handleError(InvalidOperation() << errorMessage);
- // We also output an error message to the debugger window if tracing is active, so that developers can see the error message.
- ERR("%s", errorMessage);
+ // We also output an error message to the debugger window if tracing is active, so
+ // that developers can see the error message.
+ ERR() << errorMessage;
return;
}
}
- context->setVertexAttribDivisor(index, divisor);
+ context->vertexAttribDivisor(index, divisor);
}
}
-void GL_APIENTRY BlitFramebufferANGLE(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
- GLbitfield mask, GLenum filter)
+void GL_APIENTRY BlitFramebufferANGLE(GLint srcX0,
+ GLint srcY0,
+ GLint srcX1,
+ GLint srcY1,
+ GLint dstX0,
+ GLint dstY0,
+ GLint dstX1,
+ GLint dstY1,
+ GLbitfield mask,
+ GLenum filter)
{
- EVENT("(GLint srcX0 = %d, GLint srcY0 = %d, GLint srcX1 = %d, GLint srcY1 = %d, "
- "GLint dstX0 = %d, GLint dstY0 = %d, GLint dstX1 = %d, GLint dstY1 = %d, "
- "GLbitfield mask = 0x%X, GLenum filter = 0x%X)",
- srcX0, srcY0, srcX1, srcX1, dstX0, dstY0, dstX1, dstY1, mask, filter);
+ EVENT(
+ "(GLint srcX0 = %d, GLint srcY0 = %d, GLint srcX1 = %d, GLint srcY1 = %d, "
+ "GLint dstX0 = %d, GLint dstY0 = %d, GLint dstX1 = %d, GLint dstY1 = %d, "
+ "GLbitfield mask = 0x%X, GLenum filter = 0x%X)",
+ srcX0, srcY0, srcX1, srcX1, dstX0, dstY0, dstX1, dstY1, mask, filter);
Context *context = GetValidGlobalContext();
if (context)
@@ -725,9 +733,12 @@ void GL_APIENTRY BlitFramebufferANGLE(GLint srcX0, GLint srcY0, GLint srcX1, GLi
}
}
-void GL_APIENTRY DiscardFramebufferEXT(GLenum target, GLsizei numAttachments, const GLenum *attachments)
+void GL_APIENTRY DiscardFramebufferEXT(GLenum target,
+ GLsizei numAttachments,
+ const GLenum *attachments)
{
- EVENT("(GLenum target = 0x%X, GLsizei numAttachments = %d, attachments = 0x%0.8p)", target, numAttachments, attachments);
+ EVENT("(GLenum target = 0x%X, GLsizei numAttachments = %d, attachments = 0x%0.8p)", target,
+ numAttachments, attachments);
Context *context = GetValidGlobalContext();
if (context)
@@ -742,64 +753,68 @@ void GL_APIENTRY DiscardFramebufferEXT(GLenum target, GLsizei numAttachments, co
}
}
-void GL_APIENTRY TexImage3DOES(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth,
- GLint border, GLenum format, GLenum type, const GLvoid* pixels)
+void GL_APIENTRY TexImage3DOES(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth,
+ GLint border,
+ GLenum format,
+ GLenum type,
+ const void *pixels)
{
- EVENT("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, "
- "GLsizei width = %d, GLsizei height = %d, GLsizei depth = %d, GLint border = %d, "
- "GLenum format = 0x%X, GLenum type = 0x%x, const GLvoid* pixels = 0x%0.8p)",
- target, level, internalformat, width, height, depth, border, format, type, pixels);
+ EVENT(
+ "(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, "
+ "GLsizei width = %d, GLsizei height = %d, GLsizei depth = %d, GLint border = %d, "
+ "GLenum format = 0x%X, GLenum type = 0x%x, const void* pixels = 0x%0.8p)",
+ target, level, internalformat, width, height, depth, border, format, type, pixels);
- UNIMPLEMENTED(); // FIXME
+ UNIMPLEMENTED(); // FIXME
}
-void GL_APIENTRY GetProgramBinaryOES(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary)
+void GL_APIENTRY GetProgramBinaryOES(GLuint program,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLenum *binaryFormat,
+ void *binary)
{
- EVENT("(GLenum program = 0x%X, bufSize = %d, length = 0x%0.8p, binaryFormat = 0x%0.8p, binary = 0x%0.8p)",
- program, bufSize, length, binaryFormat, binary);
+ EVENT(
+ "(GLenum program = 0x%X, bufSize = %d, length = 0x%0.8p, binaryFormat = 0x%0.8p, binary = "
+ "0x%0.8p)",
+ program, bufSize, length, binaryFormat, binary);
Context *context = GetValidGlobalContext();
if (context)
{
- if (!ValidateGetProgramBinaryOES(context, program, bufSize, length, binaryFormat, binary))
+ if (!context->skipValidation() &&
+ !ValidateGetProgramBinaryOES(context, program, bufSize, length, binaryFormat, binary))
{
return;
}
- Program *programObject = context->getProgram(program);
- ASSERT(programObject != nullptr);
-
- Error error = programObject->saveBinary(binaryFormat, binary, bufSize, length);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
+ context->getProgramBinary(program, bufSize, length, binaryFormat, binary);
}
}
-void GL_APIENTRY ProgramBinaryOES(GLuint program, GLenum binaryFormat, const void *binary, GLint length)
+void GL_APIENTRY ProgramBinaryOES(GLuint program,
+ GLenum binaryFormat,
+ const void *binary,
+ GLint length)
{
- EVENT("(GLenum program = 0x%X, binaryFormat = 0x%x, binary = 0x%0.8p, length = %d)",
- program, binaryFormat, binary, length);
+ EVENT("(GLenum program = 0x%X, binaryFormat = 0x%x, binary = 0x%0.8p, length = %d)", program,
+ binaryFormat, binary, length);
Context *context = GetValidGlobalContext();
if (context)
{
- if (!ValidateProgramBinaryOES(context, program, binaryFormat, binary, length))
+ if (!context->skipValidation() &&
+ !ValidateProgramBinaryOES(context, program, binaryFormat, binary, length))
{
return;
}
- Program *programObject = context->getProgram(program);
- ASSERT(programObject != nullptr);
-
- Error error = programObject->loadBinary(binaryFormat, binary, length);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
+ context->programBinary(program, binaryFormat, binary, length);
}
}
@@ -819,35 +834,23 @@ void GL_APIENTRY DrawBuffersEXT(GLsizei n, const GLenum *bufs)
}
}
-void GL_APIENTRY GetBufferPointervOES(GLenum target, GLenum pname, void** params)
+void GL_APIENTRY GetBufferPointervOES(GLenum target, GLenum pname, void **params)
{
- EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLvoid** params = 0x%0.8p)", target, pname, params);
+ EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, void** params = 0x%0.8p)", target, pname,
+ params);
Context *context = GetValidGlobalContext();
if (context)
{
- if (!ValidBufferTarget(context, target))
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
+ BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
- if (pname != GL_BUFFER_MAP_POINTER)
+ if (!context->skipValidation() &&
+ !ValidateGetBufferPointervOES(context, targetPacked, pname, params))
{
- context->recordError(Error(GL_INVALID_ENUM));
return;
}
- Buffer *buffer = context->getState().getTargetBuffer(target);
-
- if (!buffer || !buffer->isMapped())
- {
- *params = NULL;
- }
- else
- {
- *params = buffer->getMapPointer();
- }
+ context->getBufferPointerv(targetPacked, pname, params);
}
}
@@ -858,43 +861,17 @@ void *GL_APIENTRY MapBufferOES(GLenum target, GLenum access)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!ValidBufferTarget(context, target))
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return NULL;
- }
-
- Buffer *buffer = context->getState().getTargetBuffer(target);
+ BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
- if (buffer == NULL)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return NULL;
- }
-
- if (access != GL_WRITE_ONLY_OES)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return NULL;
- }
-
- if (buffer->isMapped())
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return NULL;
- }
-
- Error error = buffer->map(access);
- if (error.isError())
+ if (!context->skipValidation() && !ValidateMapBufferOES(context, targetPacked, access))
{
- context->recordError(error);
- return NULL;
+ return nullptr;
}
- return buffer->getMapPointer();
+ return context->mapBuffer(targetPacked, access);
}
- return NULL;
+ return nullptr;
}
GLboolean GL_APIENTRY UnmapBufferOES(GLenum target)
@@ -904,174 +881,63 @@ GLboolean GL_APIENTRY UnmapBufferOES(GLenum target)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!ValidBufferTarget(context, target))
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return GL_FALSE;
- }
-
- Buffer *buffer = context->getState().getTargetBuffer(target);
-
- if (buffer == NULL || !buffer->isMapped())
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return GL_FALSE;
- }
+ BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
- GLboolean result;
- Error error = buffer->unmap(&result);
- if (error.isError())
+ if (!context->skipValidation() && !ValidateUnmapBufferOES(context, targetPacked))
{
- context->recordError(error);
return GL_FALSE;
}
- return result;
+ return context->unmapBuffer(targetPacked);
}
return GL_FALSE;
}
-void *GL_APIENTRY MapBufferRangeEXT(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
+void *GL_APIENTRY MapBufferRangeEXT(GLenum target,
+ GLintptr offset,
+ GLsizeiptr length,
+ GLbitfield access)
{
- EVENT("(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr length = %d, GLbitfield access = 0x%X)",
- target, offset, length, access);
+ EVENT(
+ "(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr length = %d, GLbitfield access = "
+ "0x%X)",
+ target, offset, length, access);
Context *context = GetValidGlobalContext();
if (context)
{
- if (!ValidBufferTarget(context, target))
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return NULL;
- }
-
- if (offset < 0 || length < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return NULL;
- }
-
- Buffer *buffer = context->getState().getTargetBuffer(target);
-
- if (buffer == NULL)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return NULL;
- }
-
- // Check for buffer overflow
- size_t offsetSize = static_cast<size_t>(offset);
- size_t lengthSize = static_cast<size_t>(length);
-
- if (!rx::IsUnsignedAdditionSafe(offsetSize, lengthSize) ||
- offsetSize + lengthSize > static_cast<size_t>(buffer->getSize()))
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return NULL;
- }
-
- // Check for invalid bits in the mask
- GLbitfield allAccessBits = GL_MAP_READ_BIT |
- GL_MAP_WRITE_BIT |
- GL_MAP_INVALIDATE_RANGE_BIT |
- GL_MAP_INVALIDATE_BUFFER_BIT |
- GL_MAP_FLUSH_EXPLICIT_BIT |
- GL_MAP_UNSYNCHRONIZED_BIT;
-
- if (access & ~(allAccessBits))
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return NULL;
- }
-
- if (length == 0 || buffer->isMapped())
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return NULL;
- }
-
- // Check for invalid bit combinations
- if ((access & (GL_MAP_READ_BIT | GL_MAP_WRITE_BIT)) == 0)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return NULL;
- }
-
- GLbitfield writeOnlyBits = GL_MAP_INVALIDATE_RANGE_BIT |
- GL_MAP_INVALIDATE_BUFFER_BIT |
- GL_MAP_UNSYNCHRONIZED_BIT;
-
- if ((access & GL_MAP_READ_BIT) != 0 && (access & writeOnlyBits) != 0)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return NULL;
- }
-
- if ((access & GL_MAP_WRITE_BIT) == 0 && (access & GL_MAP_FLUSH_EXPLICIT_BIT) != 0)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return NULL;
- }
+ BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
- Error error = buffer->mapRange(offset, length, access);
- if (error.isError())
+ if (!context->skipValidation() &&
+ !ValidateMapBufferRangeEXT(context, targetPacked, offset, length, access))
{
- context->recordError(error);
- return NULL;
+ return nullptr;
}
- return buffer->getMapPointer();
+ return context->mapBufferRange(targetPacked, offset, length, access);
}
- return NULL;
+ return nullptr;
}
void GL_APIENTRY FlushMappedBufferRangeEXT(GLenum target, GLintptr offset, GLsizeiptr length)
{
- EVENT("(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr length = %d)", target, offset, length);
+ EVENT("(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr length = %d)", target, offset,
+ length);
Context *context = GetValidGlobalContext();
if (context)
{
- if (offset < 0 || length < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- if (!ValidBufferTarget(context, target))
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- Buffer *buffer = context->getState().getTargetBuffer(target);
-
- if (buffer == NULL)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (!buffer->isMapped() || (buffer->getAccessFlags() & GL_MAP_FLUSH_EXPLICIT_BIT) == 0)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- // Check for buffer overflow
- size_t offsetSize = static_cast<size_t>(offset);
- size_t lengthSize = static_cast<size_t>(length);
+ BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
- if (!rx::IsUnsignedAdditionSafe(offsetSize, lengthSize) ||
- offsetSize + lengthSize > static_cast<size_t>(buffer->getMapLength()))
+ if (!context->skipValidation() &&
+ !ValidateFlushMappedBufferRangeEXT(context, targetPacked, offset, length))
{
- context->recordError(Error(GL_INVALID_VALUE));
return;
}
- // We do not currently support a non-trivial implementation of FlushMappedBufferRange
+ context->flushMappedBufferRange(targetPacked, offset, length);
}
}
@@ -1087,7 +953,7 @@ void GL_APIENTRY InsertEventMarkerEXT(GLsizei length, const char *marker)
{
// The debug marker calls should not set error state
// However, it seems reasonable to set an error state if the extension is not enabled
- context->recordError(Error(GL_INVALID_OPERATION, "Extension not enabled"));
+ context->handleError(InvalidOperation() << "Extension not enabled");
return;
}
@@ -1112,7 +978,7 @@ void GL_APIENTRY PushGroupMarkerEXT(GLsizei length, const char *marker)
{
// The debug marker calls should not set error state
// However, it seems reasonable to set an error state if the extension is not enabled
- context->recordError(Error(GL_INVALID_OPERATION, "Extension not enabled"));
+ context->handleError(InvalidOperation() << "Extension not enabled");
return;
}
@@ -1146,7 +1012,7 @@ void GL_APIENTRY PopGroupMarkerEXT()
{
// The debug marker calls should not set error state
// However, it seems reasonable to set an error state if the extension is not enabled
- context->recordError(Error(GL_INVALID_OPERATION, "Extension not enabled"));
+ context->handleError(InvalidOperation() << "Extension not enabled");
return;
}
@@ -1161,18 +1027,17 @@ ANGLE_EXPORT void GL_APIENTRY EGLImageTargetTexture2DOES(GLenum target, GLeglIma
Context *context = GetValidGlobalContext();
if (context)
{
- egl::Display *display = egl::GetGlobalDisplay();
egl::Image *imageObject = reinterpret_cast<egl::Image *>(image);
- if (!ValidateEGLImageTargetTexture2DOES(context, display, target, imageObject))
+ if (!ValidateEGLImageTargetTexture2DOES(context, target, imageObject))
{
return;
}
Texture *texture = context->getTargetTexture(target);
- Error error = texture->setEGLImageTarget(target, imageObject);
+ Error error = texture->setEGLImageTarget(context, target, imageObject);
if (error.isError())
{
- context->recordError(error);
+ context->handleError(error);
return;
}
}
@@ -1186,18 +1051,17 @@ ANGLE_EXPORT void GL_APIENTRY EGLImageTargetRenderbufferStorageOES(GLenum target
Context *context = GetValidGlobalContext();
if (context)
{
- egl::Display *display = egl::GetGlobalDisplay();
egl::Image *imageObject = reinterpret_cast<egl::Image *>(image);
- if (!ValidateEGLImageTargetRenderbufferStorageOES(context, display, target, imageObject))
+ if (!ValidateEGLImageTargetRenderbufferStorageOES(context, target, imageObject))
{
return;
}
- Renderbuffer *renderbuffer = context->getState().getCurrentRenderbuffer();
- Error error = renderbuffer->setStorageEGLImageTarget(imageObject);
+ Renderbuffer *renderbuffer = context->getGLState().getCurrentRenderbuffer();
+ Error error = renderbuffer->setStorageEGLImageTarget(context, imageObject);
if (error.isError())
{
- context->recordError(error);
+ context->handleError(error);
return;
}
}
@@ -1210,7 +1074,7 @@ void GL_APIENTRY BindVertexArrayOES(GLuint array)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!ValidateBindVertexArrayOES(context, array))
+ if (!context->skipValidation() && !ValidateBindVertexArrayOES(context, array))
{
return;
}
@@ -1226,18 +1090,12 @@ void GL_APIENTRY DeleteVertexArraysOES(GLsizei n, const GLuint *arrays)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!ValidateDeleteVertexArraysOES(context, n))
+ if (!context->skipValidation() && !ValidateDeleteVertexArraysOES(context, n, arrays))
{
return;
}
- for (int arrayIndex = 0; arrayIndex < n; arrayIndex++)
- {
- if (arrays[arrayIndex] != 0)
- {
- context->deleteVertexArray(arrays[arrayIndex]);
- }
- }
+ context->deleteVertexArrays(n, arrays);
}
}
@@ -1248,15 +1106,12 @@ void GL_APIENTRY GenVertexArraysOES(GLsizei n, GLuint *arrays)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!ValidateGenVertexArraysOES(context, n))
+ if (!context->skipValidation() && !ValidateGenVertexArraysOES(context, n, arrays))
{
return;
}
- for (int arrayIndex = 0; arrayIndex < n; arrayIndex++)
- {
- arrays[arrayIndex] = context->createVertexArray();
- }
+ context->genVertexArrays(n, arrays);
}
}
@@ -1267,19 +1122,12 @@ GLboolean GL_APIENTRY IsVertexArrayOES(GLuint array)
Context *context = GetValidGlobalContext();
if (context)
{
- if (!ValidateIsVertexArrayOES(context))
- {
- return GL_FALSE;
- }
-
- if (array == 0)
+ if (!context->skipValidation() && !ValidateIsVertexArrayOES(context, array))
{
return GL_FALSE;
}
- VertexArray *vao = context->getVertexArray(array);
-
- return (vao != nullptr ? GL_TRUE : GL_FALSE);
+ return context->isVertexArray(array);
}
return GL_FALSE;
@@ -1305,9 +1153,7 @@ void GL_APIENTRY DebugMessageControlKHR(GLenum source,
return;
}
- std::vector<GLuint> idVector(ids, ids + count);
- context->getState().getDebug().setMessageControl(
- source, type, severity, std::move(idVector), (enabled != GL_FALSE));
+ context->debugMessageControl(source, type, severity, count, ids, enabled);
}
}
@@ -1331,8 +1177,7 @@ void GL_APIENTRY DebugMessageInsertKHR(GLenum source,
return;
}
- std::string msg(buf, (length > 0) ? static_cast<size_t>(length) : strlen(buf));
- context->getState().getDebug().insertMessage(source, type, id, severity, std::move(msg));
+ context->debugMessageInsert(source, type, id, severity, length, buf);
}
}
@@ -1349,7 +1194,7 @@ void GL_APIENTRY DebugMessageCallbackKHR(GLDEBUGPROCKHR callback, const void *us
return;
}
- context->getState().getDebug().setCallback(callback, userParam);
+ context->debugMessageCallback(callback, userParam);
}
}
@@ -1377,8 +1222,8 @@ GLuint GL_APIENTRY GetDebugMessageLogKHR(GLuint count,
return 0;
}
- return static_cast<GLuint>(context->getState().getDebug().getMessages(
- count, bufSize, sources, types, ids, severities, lengths, messageLog));
+ return context->getDebugMessageLog(count, bufSize, sources, types, ids, severities, lengths,
+ messageLog);
}
return 0;
@@ -1400,7 +1245,7 @@ void GL_APIENTRY PushDebugGroupKHR(GLenum source, GLuint id, GLsizei length, con
}
std::string msg(message, (length > 0) ? static_cast<size_t>(length) : strlen(message));
- context->getState().getDebug().pushGroup(source, id, std::move(msg));
+ context->pushDebugGroup(source, id, length, message);
}
}
@@ -1416,7 +1261,7 @@ void GL_APIENTRY PopDebugGroupKHR(void)
return;
}
- context->getState().getDebug().popGroup();
+ context->popDebugGroup();
}
}
@@ -1435,11 +1280,7 @@ void GL_APIENTRY ObjectLabelKHR(GLenum identifier, GLuint name, GLsizei length,
return;
}
- LabeledObject *object = context->getLabeledObject(identifier, name);
- ASSERT(object != nullptr);
-
- std::string lbl(label, (length > 0) ? static_cast<size_t>(length) : strlen(label));
- object->setLabel(lbl);
+ context->objectLabel(identifier, name, length, label);
}
}
@@ -1459,14 +1300,7 @@ GetObjectLabelKHR(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *leng
return;
}
- LabeledObject *object = context->getLabeledObject(identifier, name);
- ASSERT(object != nullptr);
-
- const std::string &objectLabel = object->getLabel();
- size_t writeLength = std::min(static_cast<size_t>(bufSize) - 1, objectLabel.length());
- std::copy(objectLabel.begin(), objectLabel.begin() + writeLength, label);
- label[writeLength] = '\0';
- *length = static_cast<GLsizei>(writeLength);
+ context->getObjectLabel(identifier, name, bufSize, length, label);
}
}
@@ -1483,11 +1317,7 @@ void GL_APIENTRY ObjectPtrLabelKHR(const void *ptr, GLsizei length, const GLchar
return;
}
- LabeledObject *object = context->getLabeledObjectFromPtr(ptr);
- ASSERT(object != nullptr);
-
- std::string lbl(label, (length > 0) ? static_cast<size_t>(length) : strlen(label));
- object->setLabel(lbl);
+ context->objectPtrLabel(ptr, length, label);
}
}
@@ -1509,14 +1339,7 @@ void GL_APIENTRY GetObjectPtrLabelKHR(const void *ptr,
return;
}
- LabeledObject *object = context->getLabeledObjectFromPtr(ptr);
- ASSERT(object != nullptr);
-
- const std::string &objectLabel = object->getLabel();
- size_t writeLength = std::min(static_cast<size_t>(bufSize) - 1, objectLabel.length());
- std::copy(objectLabel.begin(), objectLabel.begin() + writeLength, label);
- label[writeLength] = '\0';
- *length = static_cast<GLsizei>(writeLength);
+ context->getObjectPtrLabel(ptr, bufSize, length, label);
}
}
@@ -1535,4 +1358,2201 @@ void GL_APIENTRY GetPointervKHR(GLenum pname, void **params)
context->getPointerv(pname, params);
}
}
+
+ANGLE_EXPORT void GL_APIENTRY BindUniformLocationCHROMIUM(GLuint program,
+ GLint location,
+ const GLchar *name)
+{
+ EVENT("(GLuint program = %u, GLint location = %d, const GLchar *name = 0x%0.8p)", program,
+ location, name);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!ValidateBindUniformLocationCHROMIUM(context, program, location, name))
+ {
+ return;
+ }
+
+ context->bindUniformLocation(program, location, name);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY CoverageModulationCHROMIUM(GLenum components)
+{
+ EVENT("(GLenum components = %u)", components);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!ValidateCoverageModulationCHROMIUM(context, components))
+ {
+ return;
+ }
+ context->setCoverageModulation(components);
+ }
+}
+
+// CHROMIUM_path_rendering
+ANGLE_EXPORT void GL_APIENTRY MatrixLoadfCHROMIUM(GLenum matrixMode, const GLfloat *matrix)
+{
+ EVENT("(GLenum matrixMode = %u)", matrixMode);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() && !ValidateMatrix(context, matrixMode, matrix))
+ {
+ return;
+ }
+ context->loadPathRenderingMatrix(matrixMode, matrix);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY MatrixLoadIdentityCHROMIUM(GLenum matrixMode)
+{
+ EVENT("(GLenum matrixMode = %u)", matrixMode);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() && !ValidateMatrixMode(context, matrixMode))
+ {
+ return;
+ }
+ context->loadPathRenderingIdentityMatrix(matrixMode);
+ }
+}
+
+ANGLE_EXPORT GLuint GL_APIENTRY GenPathsCHROMIUM(GLsizei range)
+{
+ EVENT("(GLsizei range = %d)", range);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() && !ValidateGenPaths(context, range))
+ {
+ return 0;
+ }
+ return context->createPaths(range);
+ }
+ return 0;
+}
+
+ANGLE_EXPORT void GL_APIENTRY DeletePathsCHROMIUM(GLuint first, GLsizei range)
+{
+ EVENT("(GLuint first = %u, GLsizei range = %d)", first, range);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() && !ValidateDeletePaths(context, first, range))
+ {
+ return;
+ }
+ context->deletePaths(first, range);
+ }
+}
+
+ANGLE_EXPORT GLboolean GL_APIENTRY IsPathCHROMIUM(GLuint path)
+{
+ EVENT("(GLuint path = %u)", path);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() && !ValidateIsPath(context))
+ {
+ return GL_FALSE;
+ }
+ return context->hasPathData(path);
+ }
+ return GL_FALSE;
+}
+
+ANGLE_EXPORT void GL_APIENTRY PathCommandsCHROMIUM(GLuint path,
+ GLsizei numCommands,
+ const GLubyte *commands,
+ GLsizei numCoords,
+ GLenum coordType,
+ const void *coords)
+{
+ EVENT(
+ "(GLuint path = %u, GLsizei numCommands = %d, commands = %p, "
+ "GLsizei numCoords = %d, GLenum coordType = %u, void* coords = %p)",
+ path, numCommands, commands, numCoords, coordType, coords);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation())
+ {
+ if (!ValidatePathCommands(context, path, numCommands, commands, numCoords, coordType,
+ coords))
+ {
+ return;
+ }
+ }
+ context->setPathCommands(path, numCommands, commands, numCoords, coordType, coords);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY PathParameterfCHROMIUM(GLuint path, GLenum pname, GLfloat value)
+{
+ EVENT("(GLuint path = %u, GLenum pname = %u, GLfloat value = %f)", path, pname, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() && !ValidateSetPathParameter(context, path, pname, value))
+ {
+ return;
+ }
+ context->setPathParameterf(path, pname, value);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY PathParameteriCHROMIUM(GLuint path, GLenum pname, GLint value)
+{
+ PathParameterfCHROMIUM(path, pname, static_cast<GLfloat>(value));
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetPathParameterfCHROMIUM(GLuint path, GLenum pname, GLfloat *value)
+{
+ EVENT("(GLuint path = %u, GLenum pname = %u)", path, pname);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() && !ValidateGetPathParameter(context, path, pname, value))
+ {
+ return;
+ }
+ context->getPathParameterfv(path, pname, value);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetPathParameteriCHROMIUM(GLuint path, GLenum pname, GLint *value)
+{
+ GLfloat val = 0.0f;
+ GetPathParameterfCHROMIUM(path, pname, value != nullptr ? &val : nullptr);
+ if (value)
+ *value = static_cast<GLint>(val);
+}
+
+ANGLE_EXPORT void GL_APIENTRY PathStencilFuncCHROMIUM(GLenum func, GLint ref, GLuint mask)
+{
+ EVENT("(GLenum func = %u, GLint ref = %d, GLuint mask = %u)", func, ref, mask);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() && !ValidatePathStencilFunc(context, func, ref, mask))
+ {
+ return;
+ }
+ context->setPathStencilFunc(func, ref, mask);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY StencilFillPathCHROMIUM(GLuint path, GLenum fillMode, GLuint mask)
+{
+ EVENT("(GLuint path = %u, GLenum fillMode = %u, GLuint mask = %u)", path, fillMode, mask);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() && !ValidateStencilFillPath(context, path, fillMode, mask))
+ {
+ return;
+ }
+ context->stencilFillPath(path, fillMode, mask);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY StencilStrokePathCHROMIUM(GLuint path, GLint reference, GLuint mask)
+{
+ EVENT("(GLuint path = %u, GLint ference = %d, GLuint mask = %u)", path, reference, mask);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() &&
+ !ValidateStencilStrokePath(context, path, reference, mask))
+ {
+ return;
+ }
+ context->stencilStrokePath(path, reference, mask);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY CoverFillPathCHROMIUM(GLuint path, GLenum coverMode)
+{
+ EVENT("(GLuint path = %u, GLenum coverMode = %u)", path, coverMode);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() && !ValidateCoverPath(context, path, coverMode))
+ {
+ return;
+ }
+ context->coverFillPath(path, coverMode);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY CoverStrokePathCHROMIUM(GLuint path, GLenum coverMode)
+{
+ EVENT("(GLuint path = %u, GLenum coverMode = %u)", path, coverMode);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() && !ValidateCoverPath(context, path, coverMode))
+ {
+ return;
+ }
+ context->coverStrokePath(path, coverMode);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY StencilThenCoverFillPathCHROMIUM(GLuint path,
+ GLenum fillMode,
+ GLuint mask,
+ GLenum coverMode)
+{
+ EVENT("(GLuint path = %u, GLenum fillMode = %u, GLuint mask = %u, GLenum coverMode = %u)", path,
+ fillMode, mask, coverMode);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() &&
+ !ValidateStencilThenCoverFillPath(context, path, fillMode, mask, coverMode))
+ {
+ return;
+ }
+ context->stencilThenCoverFillPath(path, fillMode, mask, coverMode);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY StencilThenCoverStrokePathCHROMIUM(GLuint path,
+ GLint reference,
+ GLuint mask,
+ GLenum coverMode)
+{
+ EVENT("(GLuint path = %u, GLint reference = %d, GLuint mask = %u, GLenum coverMode = %u)", path,
+ reference, mask, coverMode);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() &&
+ !ValidateStencilThenCoverStrokePath(context, path, reference, mask, coverMode))
+ {
+ return;
+ }
+ context->stencilThenCoverStrokePath(path, reference, mask, coverMode);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY CoverFillPathInstancedCHROMIUM(GLsizei numPaths,
+ GLenum pathNameType,
+ const void *paths,
+ GLuint pathBase,
+ GLenum coverMode,
+ GLenum transformType,
+ const GLfloat *transformValues)
+{
+ EVENT(
+ "(GLsizei numPaths = %d, GLenum pathNameType = %u, const void *paths = %p "
+ "GLuint pathBase = %u, GLenum coverMode = %u, GLenum transformType = %u "
+ "const GLfloat *transformValues = %p)",
+ numPaths, pathNameType, paths, pathBase, coverMode, transformType, transformValues);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() &&
+ !ValidateCoverFillPathInstanced(context, numPaths, pathNameType, paths, pathBase,
+ coverMode, transformType, transformValues))
+ {
+ return;
+ }
+ context->coverFillPathInstanced(numPaths, pathNameType, paths, pathBase, coverMode,
+ transformType, transformValues);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY CoverStrokePathInstancedCHROMIUM(GLsizei numPaths,
+ GLenum pathNameType,
+ const void *paths,
+ GLuint pathBase,
+ GLenum coverMode,
+ GLenum transformType,
+ const GLfloat *transformValues)
+{
+ EVENT(
+ "(GLsizei numPaths = %d, GLenum pathNameType = %u, const void *paths = %p "
+ "GLuint pathBase = %u, GLenum coverMode = %u, GLenum transformType = %u "
+ "const GLfloat *transformValues = %p)",
+ numPaths, pathNameType, paths, pathBase, coverMode, transformType, transformValues);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() &&
+ !ValidateCoverStrokePathInstanced(context, numPaths, pathNameType, paths, pathBase,
+ coverMode, transformType, transformValues))
+ {
+ return;
+ }
+ context->coverStrokePathInstanced(numPaths, pathNameType, paths, pathBase, coverMode,
+ transformType, transformValues);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY StencilStrokePathInstancedCHROMIUM(GLsizei numPaths,
+ GLenum pathNameType,
+ const void *paths,
+ GLuint pathBase,
+ GLint reference,
+ GLuint mask,
+ GLenum transformType,
+ const GLfloat *transformValues)
+{
+ EVENT(
+ "(GLsizei numPaths = %u, GLenum pathNameType = %u, const void *paths = %p "
+ "GLuint pathBase = %u, GLint reference = %d GLuint mask = %u GLenum transformType = %u "
+ "const GLfloat *transformValues = %p)",
+ numPaths, pathNameType, paths, pathBase, reference, mask, transformType, transformValues);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() &&
+ !ValidateStencilStrokePathInstanced(context, numPaths, pathNameType, paths, pathBase,
+ reference, mask, transformType, transformValues))
+ {
+ return;
+ }
+ context->stencilStrokePathInstanced(numPaths, pathNameType, paths, pathBase, reference,
+ mask, transformType, transformValues);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY StencilFillPathInstancedCHROMIUM(GLsizei numPaths,
+ GLenum pathNameType,
+ const void *paths,
+ GLuint pathBase,
+ GLenum fillMode,
+ GLuint mask,
+ GLenum transformType,
+ const GLfloat *transformValues)
+{
+ EVENT(
+ "(GLsizei numPaths = %u, GLenum pathNameType = %u const void *paths = %p "
+ "GLuint pathBase = %u, GLenum fillMode = %u, GLuint mask = %u, GLenum transformType = %u "
+ "const GLfloat *transformValues = %p)",
+ numPaths, pathNameType, paths, pathBase, fillMode, mask, transformType, transformValues);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() &&
+ !ValidateStencilFillPathInstanced(context, numPaths, pathNameType, paths, pathBase,
+ fillMode, mask, transformType, transformValues))
+ {
+ return;
+ }
+ context->stencilFillPathInstanced(numPaths, pathNameType, paths, pathBase, fillMode, mask,
+ transformType, transformValues);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY
+StencilThenCoverFillPathInstancedCHROMIUM(GLsizei numPaths,
+ GLenum pathNameType,
+ const void *paths,
+ GLuint pathBase,
+ GLenum fillMode,
+ GLuint mask,
+ GLenum coverMode,
+ GLenum transformType,
+ const GLfloat *transformValues)
+{
+ EVENT(
+ "(GLsizei numPaths = %u, GLenum pathNameType = %u const void *paths = %p "
+ "GLuint pathBase = %u, GLenum coverMode = %u, GLuint mask = %u, GLenum transformType = %u "
+ "const GLfloat *transformValues = %p)",
+ numPaths, pathNameType, paths, pathBase, coverMode, mask, transformType, transformValues);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() &&
+ !ValidateStencilThenCoverFillPathInstanced(context, numPaths, pathNameType, paths,
+ pathBase, fillMode, mask, coverMode,
+ transformType, transformValues))
+ {
+ return;
+ }
+ context->stencilThenCoverFillPathInstanced(numPaths, pathNameType, paths, pathBase,
+ fillMode, mask, coverMode, transformType,
+ transformValues);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY
+StencilThenCoverStrokePathInstancedCHROMIUM(GLsizei numPaths,
+ GLenum pathNameType,
+ const void *paths,
+ GLuint pathBase,
+ GLint reference,
+ GLuint mask,
+ GLenum coverMode,
+ GLenum transformType,
+ const GLfloat *transformValues)
+{
+ EVENT(
+ "(GLsizei numPaths = %u, GLenum pathNameType = %u, const void *paths = %p "
+ "GLuint pathBase = %u GLenum coverMode = %u GLint reference = %d GLuint mask = %u GLenum "
+ "transformType = %u "
+ "const GLfloat *transformValues = %p)",
+ numPaths, pathNameType, paths, pathBase, coverMode, reference, mask, transformType,
+ transformValues);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() &&
+ !ValidateStencilThenCoverStrokePathInstanced(context, numPaths, pathNameType, paths,
+ pathBase, reference, mask, coverMode,
+ transformType, transformValues))
+ {
+ return;
+ }
+ context->stencilThenCoverStrokePathInstanced(numPaths, pathNameType, paths, pathBase,
+ reference, mask, coverMode, transformType,
+ transformValues);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY BindFragmentInputLocationCHROMIUM(GLuint program,
+ GLint location,
+ const GLchar *name)
+{
+ EVENT("(GLuint program = %u, GLint location = %d, const GLchar *name = %p)", program, location,
+ name);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() &&
+ !ValidateBindFragmentInputLocation(context, program, location, name))
+ {
+ return;
+ }
+ context->bindFragmentInputLocation(program, location, name);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY ProgramPathFragmentInputGenCHROMIUM(GLuint program,
+ GLint location,
+ GLenum genMode,
+ GLint components,
+ const GLfloat *coeffs)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location %d, GLenum genMode = %u, GLint components = %d, "
+ "const GLfloat * coeffs = %p)",
+ program, location, genMode, components, coeffs);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() &&
+ !ValidateProgramPathFragmentInputGen(context, program, location, genMode, components,
+ coeffs))
+ {
+ return;
+ }
+ context->programPathFragmentInputGen(program, location, genMode, components, coeffs);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY CopyTextureCHROMIUM(GLuint sourceId,
+ GLint sourceLevel,
+ GLenum destTarget,
+ GLuint destId,
+ GLint destLevel,
+ GLint internalFormat,
+ GLenum destType,
+ GLboolean unpackFlipY,
+ GLboolean unpackPremultiplyAlpha,
+ GLboolean unpackUnmultiplyAlpha)
+{
+ EVENT(
+ "(GLuint sourceId = %u, GLint sourceLevel = %d, GLenum destTarget = 0x%X, GLuint destId = "
+ "%u, GLint destLevel = %d, GLint internalFormat = 0x%X, GLenum destType = "
+ "0x%X, GLboolean unpackFlipY = %u, GLboolean unpackPremultiplyAlpha = %u, GLboolean "
+ "unpackUnmultiplyAlpha = %u)",
+ sourceId, sourceLevel, destTarget, destId, destLevel, internalFormat, destType, unpackFlipY,
+ unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() &&
+ !ValidateCopyTextureCHROMIUM(context, sourceId, sourceLevel, destTarget, destId,
+ destLevel, internalFormat, destType, unpackFlipY,
+ unpackPremultiplyAlpha, unpackUnmultiplyAlpha))
+ {
+ return;
+ }
+
+ context->copyTextureCHROMIUM(sourceId, sourceLevel, destTarget, destId, destLevel,
+ internalFormat, destType, unpackFlipY, unpackPremultiplyAlpha,
+ unpackUnmultiplyAlpha);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY CopySubTextureCHROMIUM(GLuint sourceId,
+ GLint sourceLevel,
+ GLenum destTarget,
+ GLuint destId,
+ GLint destLevel,
+ GLint xoffset,
+ GLint yoffset,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLboolean unpackFlipY,
+ GLboolean unpackPremultiplyAlpha,
+ GLboolean unpackUnmultiplyAlpha)
+{
+ EVENT(
+ "(GLuint sourceId = %u, GLint sourceLevel = %d, GLenum destTarget = 0x%X, GLuint destId = "
+ "%u, GLint destLevel = %d, GLint xoffset = "
+ "%d, GLint yoffset = %d, GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = "
+ "%d, GLboolean unpackPremultiplyAlpha = %u, GLboolean unpackUnmultiplyAlpha = %u)",
+ sourceId, sourceLevel, destTarget, destId, destLevel, xoffset, yoffset, x, y, width, height,
+ unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() &&
+ !ValidateCopySubTextureCHROMIUM(
+ context, sourceId, sourceLevel, destTarget, destId, destLevel, xoffset, yoffset, x,
+ y, width, height, unpackFlipY, unpackPremultiplyAlpha, unpackUnmultiplyAlpha))
+ {
+ return;
+ }
+
+ context->copySubTextureCHROMIUM(sourceId, sourceLevel, destTarget, destId, destLevel,
+ xoffset, yoffset, x, y, width, height, unpackFlipY,
+ unpackPremultiplyAlpha, unpackUnmultiplyAlpha);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY CompressedCopyTextureCHROMIUM(GLuint sourceId, GLuint destId)
+{
+ EVENT("(GLuint sourceId = %u, GLuint destId = %u)", sourceId, destId);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() &&
+ !ValidateCompressedCopyTextureCHROMIUM(context, sourceId, destId))
+ {
+ return;
+ }
+
+ context->compressedCopyTextureCHROMIUM(sourceId, destId);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY RequestExtensionANGLE(const GLchar *name)
+{
+ EVENT("(const GLchar *name = %p)", name);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() && !ValidateRequestExtensionANGLE(context, name))
+ {
+ return;
+ }
+
+ context->requestExtension(name);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetBooleanvRobustANGLE(GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLboolean *params)
+{
+ EVENT(
+ "(GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, GLboolean* params "
+ "= 0x%0.8p)",
+ pname, bufSize, length, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLenum nativeType;
+ unsigned int numParams = 0;
+ if (!ValidateRobustStateQuery(context, pname, bufSize, &nativeType, &numParams))
+ {
+ return;
+ }
+
+ context->getBooleanv(pname, params);
+ SetRobustLengthParam(length, numParams);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetBufferParameterivRobustANGLE(GLenum target,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params)
+{
+ EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", target, pname,
+ params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+
+ GLsizei numParams = 0;
+ if (!ValidateGetBufferParameterivRobustANGLE(context, targetPacked, pname, bufSize,
+ &numParams, params))
+ {
+ return;
+ }
+
+ Buffer *buffer = context->getGLState().getTargetBuffer(targetPacked);
+ QueryBufferParameteriv(buffer, pname, params);
+ SetRobustLengthParam(length, numParams);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetFloatvRobustANGLE(GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLfloat *params)
+{
+ EVENT(
+ "(GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, GLfloat* params = "
+ "0x%0.8p)",
+ pname, bufSize, length, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLenum nativeType;
+ unsigned int numParams = 0;
+ if (!ValidateRobustStateQuery(context, pname, bufSize, &nativeType, &numParams))
+ {
+ return;
+ }
+
+ context->getFloatv(pname, params);
+ SetRobustLengthParam(length, numParams);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetFramebufferAttachmentParameterivRobustANGLE(GLenum target,
+ GLenum attachment,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = "
+ "%d, GLsizei* length = 0x%0.8p, GLint* params = 0x%0.8p)",
+ target, attachment, pname, bufSize, length, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLsizei numParams = 0;
+ if (!ValidateGetFramebufferAttachmentParameterivRobustANGLE(context, target, attachment,
+ pname, bufSize, &numParams))
+ {
+ return;
+ }
+
+ const Framebuffer *framebuffer = context->getGLState().getTargetFramebuffer(target);
+ QueryFramebufferAttachmentParameteriv(framebuffer, attachment, pname, params);
+ SetRobustLengthParam(length, numParams);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetIntegervRobustANGLE(GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *data)
+{
+ EVENT(
+ "(GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, GLint* params = "
+ "0x%0.8p)",
+ pname, bufSize, length, data);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLenum nativeType;
+ unsigned int numParams = 0;
+ if (!ValidateRobustStateQuery(context, pname, bufSize, &nativeType, &numParams))
+ {
+ return;
+ }
+
+ context->getIntegerv(pname, data);
+ SetRobustLengthParam(length, numParams);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetProgramivRobustANGLE(GLuint program,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params)
+{
+ EVENT(
+ "(GLuint program = %d, GLenum pname = %d, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
+ "GLint* params = 0x%0.8p)",
+ program, pname, bufSize, length, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLsizei numParams = 0;
+ if (!ValidateGetProgramivRobustANGLE(context, program, pname, bufSize, &numParams))
+ {
+ return;
+ }
+
+ Program *programObject = context->getProgram(program);
+ QueryProgramiv(context, programObject, pname, params);
+ SetRobustLengthParam(length, numParams);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetRenderbufferParameterivRobustANGLE(GLenum target,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
+ "0x%0.8p, GLint* params = 0x%0.8p)",
+ target, pname, bufSize, length, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLsizei numParams = 0;
+ if (!ValidateGetRenderbufferParameterivRobustANGLE(context, target, pname, bufSize,
+ &numParams, params))
+ {
+ return;
+ }
+
+ Renderbuffer *renderbuffer = context->getGLState().getCurrentRenderbuffer();
+ QueryRenderbufferiv(context, renderbuffer, pname, params);
+ SetRobustLengthParam(length, numParams);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY
+GetShaderivRobustANGLE(GLuint shader, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params)
+{
+ EVENT(
+ "(GLuint shader = %d, GLenum pname = %d, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
+ "GLint* params = 0x%0.8p)",
+ shader, pname, bufSize, length, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLsizei numParams = 0;
+ if (!ValidateGetShaderivRobustANGLE(context, shader, pname, bufSize, &numParams, params))
+ {
+ return;
+ }
+
+ Shader *shaderObject = context->getShader(shader);
+ QueryShaderiv(context, shaderObject, pname, params);
+ SetRobustLengthParam(length, numParams);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetTexParameterfvRobustANGLE(GLenum target,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLfloat *params)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
+ "0x%0.8p, GLfloat* params = 0x%0.8p)",
+ target, pname, bufSize, length, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLsizei numParams = 0;
+ if (!ValidateGetTexParameterfvRobustANGLE(context, target, pname, bufSize, &numParams,
+ params))
+ {
+ return;
+ }
+
+ Texture *texture = context->getTargetTexture(target);
+ QueryTexParameterfv(texture, pname, params);
+ SetRobustLengthParam(length, numParams);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetTexParameterivRobustANGLE(GLenum target,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
+ "0x%0.8p, GLfloat* params = 0x%0.8p)",
+ target, pname, bufSize, length, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLsizei numParams = 0;
+ if (!ValidateGetTexParameterivRobustANGLE(context, target, pname, bufSize, &numParams,
+ params))
+ {
+ return;
+ }
+
+ Texture *texture = context->getTargetTexture(target);
+ QueryTexParameteriv(texture, pname, params);
+ SetRobustLengthParam(length, numParams);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetUniformfvRobustANGLE(GLuint program,
+ GLint location,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLfloat *params)
+{
+ EVENT(
+ "(GLuint program = %d, GLint location = %d, GLsizei bufsize = %d, GLsizei* length = "
+ "0x%0.8p, GLfloat* params = 0x%0.8p)",
+ program, location, bufSize, length, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLsizei writeLength = 0;
+ if (!ValidateGetUniformfvRobustANGLE(context, program, location, bufSize, &writeLength,
+ params))
+ {
+ return;
+ }
+
+ Program *programObject = context->getProgram(program);
+ ASSERT(programObject);
+
+ programObject->getUniformfv(context, location, params);
+ SetRobustLengthParam(length, writeLength);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetUniformivRobustANGLE(GLuint program,
+ GLint location,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params)
+{
+ EVENT(
+ "(GLuint program = %d, GLint location = %d, GLsizei bufsize = %d, GLsizei* length = "
+ "0x%0.8p, GLint* params = 0x%0.8p)",
+ program, location, bufSize, length, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLsizei writeLength = 0;
+ if (!ValidateGetUniformivRobustANGLE(context, program, location, bufSize, &writeLength,
+ params))
+ {
+ return;
+ }
+
+ Program *programObject = context->getProgram(program);
+ ASSERT(programObject);
+
+ programObject->getUniformiv(context, location, params);
+ SetRobustLengthParam(length, writeLength);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribfvRobustANGLE(GLuint index,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLfloat *params)
+{
+ EVENT(
+ "(GLuint index = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
+ "GLfloat* params = 0x%0.8p)",
+ index, pname, bufSize, length, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLsizei writeLength = 0;
+ if (!ValidateGetVertexAttribfvRobustANGLE(context, index, pname, bufSize, &writeLength,
+ params))
+ {
+ return;
+ }
+
+ context->getVertexAttribfv(index, pname, params);
+ SetRobustLengthParam(length, writeLength);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribivRobustANGLE(GLuint index,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params)
+{
+ EVENT(
+ "(GLuint index = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
+ "GLint* params = 0x%0.8p)",
+ index, pname, bufSize, length, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLsizei writeLength = 0;
+ if (!ValidateGetVertexAttribivRobustANGLE(context, index, pname, bufSize, &writeLength,
+ params))
+ {
+ return;
+ }
+
+ context->getVertexAttribiv(index, pname, params);
+ SetRobustLengthParam(length, writeLength);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribPointervRobustANGLE(GLuint index,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ void **pointer)
+{
+ EVENT(
+ "(GLuint index = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
+ "void** pointer = 0x%0.8p)",
+ index, pname, bufSize, length, pointer);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLsizei writeLength = 0;
+ if (!ValidateGetVertexAttribPointervRobustANGLE(context, index, pname, bufSize,
+ &writeLength, pointer))
+ {
+ return;
+ }
+
+ context->getVertexAttribPointerv(index, pname, pointer);
+ SetRobustLengthParam(length, writeLength);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY ReadPixelsRobustANGLE(GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLsizei *columns,
+ GLsizei *rows,
+ void *pixels)
+{
+ EVENT(
+ "(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, "
+ "GLenum format = 0x%X, GLenum type = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
+ "0x%0.8p, GLsizei* columns = 0x%0.8p, GLsizei* rows = 0x%0.8p, void* pixels = 0x%0.8p)",
+ x, y, width, height, format, type, bufSize, length, columns, rows, pixels);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLsizei writeLength = 0;
+ GLsizei writeColumns = 0;
+ GLsizei writeRows = 0;
+ if (!ValidateReadPixelsRobustANGLE(context, x, y, width, height, format, type, bufSize,
+ &writeLength, &writeColumns, &writeRows, pixels))
+ {
+ return;
+ }
+
+ context->readPixels(x, y, width, height, format, type, pixels);
+
+ SetRobustLengthParam(length, writeLength);
+ SetRobustLengthParam(columns, writeColumns);
+ SetRobustLengthParam(rows, writeRows);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY TexImage2DRobustANGLE(GLenum target,
+ GLint level,
+ GLint internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLint border,
+ GLenum format,
+ GLenum type,
+ GLsizei bufSize,
+ const void *pixels)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLint level = %d, GLint internalformat = %d, GLsizei width = %d, "
+ "GLsizei height = %d, GLint border = %d, GLenum format = 0x%X, GLenum type = 0x%X, GLsizei "
+ "bufSize = %d, const void* pixels = 0x%0.8p)",
+ target, level, internalformat, width, height, border, format, type, bufSize, pixels);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!ValidateTexImage2DRobust(context, target, level, internalformat, width, height, border,
+ format, type, bufSize, pixels))
+ {
+ return;
+ }
+
+ context->texImage2D(target, level, internalformat, width, height, border, format, type,
+ pixels);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY TexParameterfvRobustANGLE(GLenum target,
+ GLenum pname,
+ GLsizei bufSize,
+ const GLfloat *params)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLfloat* params = "
+ "0x%0.8p)",
+ target, pname, bufSize, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!ValidateTexParameterfvRobustANGLE(context, target, pname, bufSize, params))
+ {
+ return;
+ }
+
+ Texture *texture = context->getTargetTexture(target);
+ SetTexParameterfv(context, texture, pname, params);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY TexParameterivRobustANGLE(GLenum target,
+ GLenum pname,
+ GLsizei bufSize,
+ const GLint *params)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLfloat* params = "
+ "0x%0.8p)",
+ target, pname, bufSize, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!ValidateTexParameterivRobustANGLE(context, target, pname, bufSize, params))
+ {
+ return;
+ }
+
+ Texture *texture = context->getTargetTexture(target);
+ SetTexParameteriv(context, texture, pname, params);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY TexSubImage2DRobustANGLE(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ GLsizei bufSize,
+ const void *pixels)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
+ "GLsizei width = %d, GLsizei height = %d, GLenum format = 0x%X, GLenum type = 0x%X, "
+ "GLsizei bufsize = %d, const void* pixels = 0x%0.8p)",
+ target, level, xoffset, yoffset, width, height, format, type, bufSize, pixels);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!ValidateTexSubImage2DRobustANGLE(context, target, level, xoffset, yoffset, width,
+ height, format, type, bufSize, pixels))
+ {
+ return;
+ }
+
+ context->texSubImage2D(target, level, xoffset, yoffset, width, height, format, type,
+ pixels);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY TexImage3DRobustANGLE(GLenum target,
+ GLint level,
+ GLint internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth,
+ GLint border,
+ GLenum format,
+ GLenum type,
+ GLsizei bufSize,
+ const void *pixels)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLint level = %d, GLint internalformat = %d, GLsizei width = %d, "
+ "GLsizei height = %d, GLsizei depth = %d, GLint border = %d, GLenum format = 0x%X, "
+ "GLenum type = 0x%X, GLsizei bufsize = %d, const void* pixels = 0x%0.8p)",
+ target, level, internalformat, width, height, depth, border, format, type, bufSize, pixels);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!ValidateTexImage3DRobustANGLE(context, target, level, internalformat, width, height,
+ depth, border, format, type, bufSize, pixels))
+ {
+ return;
+ }
+
+ context->texImage3D(target, level, internalformat, width, height, depth, border, format,
+ type, pixels);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY TexSubImage3DRobustANGLE(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLint zoffset,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth,
+ GLenum format,
+ GLenum type,
+ GLsizei bufSize,
+ const void *pixels)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
+ "GLint zoffset = %d, GLsizei width = %d, GLsizei height = %d, GLsizei depth = %d, "
+ "GLenum format = 0x%X, GLenum type = 0x%X, GLsizei bufsize = %d, const void* pixels = "
+ "0x%0.8p)",
+ target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, bufSize,
+ pixels);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!ValidateTexSubImage3DRobustANGLE(context, target, level, xoffset, yoffset, zoffset,
+ width, height, depth, format, type, bufSize, pixels))
+ {
+ return;
+ }
+
+ context->texSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth,
+ format, type, pixels);
+ }
+}
+
+void GL_APIENTRY CompressedTexImage2DRobustANGLE(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLint border,
+ GLsizei imageSize,
+ GLsizei dataSize,
+ const GLvoid *data)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, GLsizei width = "
+ "%d, "
+ "GLsizei height = %d, GLint border = %d, GLsizei imageSize = %d, GLsizei dataSize = %d, "
+ "const GLvoid* data = 0x%0.8p)",
+ target, level, internalformat, width, height, border, imageSize, dataSize, data);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() &&
+ !ValidateCompressedTexImage2DRobustANGLE(context, target, level, internalformat, width,
+ height, border, imageSize, dataSize, data))
+ {
+ return;
+ }
+
+ context->compressedTexImage2D(target, level, internalformat, width, height, border,
+ imageSize, data);
+ }
}
+
+void GL_APIENTRY CompressedTexSubImage2DRobustANGLE(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLsizei imageSize,
+ GLsizei dataSize,
+ const GLvoid *data)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
+ "GLsizei width = %d, GLsizei height = %d, GLenum format = 0x%X, "
+ "GLsizei imageSize = %d, GLsizei dataSize = %d, const GLvoid* data = 0x%0.8p)",
+ target, level, xoffset, yoffset, width, height, format, imageSize, dataSize, data);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() && !ValidateCompressedTexSubImage2DRobustANGLE(
+ context, target, level, xoffset, yoffset, width,
+ height, format, imageSize, dataSize, data))
+ {
+ return;
+ }
+
+ context->compressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format,
+ imageSize, data);
+ }
+}
+
+void GL_APIENTRY CompressedTexImage3DRobustANGLE(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth,
+ GLint border,
+ GLsizei imageSize,
+ GLsizei dataSize,
+ const GLvoid *data)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, GLsizei width = "
+ "%d, "
+ "GLsizei height = %d, GLsizei depth = %d, GLint border = %d, GLsizei imageSize = %d, "
+ "GLsizei dataSize = %d, const GLvoid* data = 0x%0.8p)",
+ target, level, internalformat, width, height, depth, border, imageSize, dataSize, data);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() && !ValidateCompressedTexImage3DRobustANGLE(
+ context, target, level, internalformat, width, height,
+ depth, border, imageSize, dataSize, data))
+ {
+ return;
+ }
+
+ context->compressedTexImage3D(target, level, internalformat, width, height, depth, border,
+ imageSize, data);
+ }
+}
+
+void GL_APIENTRY CompressedTexSubImage3DRobustANGLE(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLint zoffset,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth,
+ GLenum format,
+ GLsizei imageSize,
+ GLsizei dataSize,
+ const GLvoid *data)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
+ "GLint zoffset = %d, GLsizei width = %d, GLsizei height = %d, GLsizei depth = %d, "
+ "GLenum format = 0x%X, GLsizei imageSize = %d, GLsizei dataSize = %d, const GLvoid* data = "
+ "0x%0.8p)",
+ target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, dataSize,
+ data);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() &&
+ !ValidateCompressedTexSubImage3DRobustANGLE(context, target, level, xoffset, yoffset,
+ zoffset, width, height, depth, format,
+ imageSize, dataSize, data))
+ {
+ return;
+ }
+
+ context->compressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height,
+ depth, format, imageSize, data);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY
+GetQueryivRobustANGLE(GLenum target, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
+ "0x%0.8p, GLint* params = 0x%0.8p)",
+ target, pname, bufSize, length, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLsizei numParams = 0;
+ if (!ValidateGetQueryivRobustANGLE(context, target, pname, bufSize, &numParams, params))
+ {
+ return;
+ }
+
+ context->getQueryiv(target, pname, params);
+ SetRobustLengthParam(length, numParams);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetQueryObjectuivRobustANGLE(GLuint id,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLuint *params)
+{
+ EVENT(
+ "(GLuint id = %u, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
+ "GLint* params = 0x%0.8p)",
+ id, pname, bufSize, length, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLsizei numParams = 0;
+ if (!ValidateGetQueryObjectuivRobustANGLE(context, id, pname, bufSize, &numParams, params))
+ {
+ return;
+ }
+
+ context->getQueryObjectuiv(id, pname, params);
+ SetRobustLengthParam(length, numParams);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetBufferPointervRobustANGLE(GLenum target,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ void **params)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
+ "0x%0.8p, void** params = 0x%0.8p)",
+ target, pname, bufSize, length, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+
+ GLsizei numParams = 0;
+ if (!ValidateGetBufferPointervRobustANGLE(context, targetPacked, pname, bufSize, &numParams,
+ params))
+ {
+ return;
+ }
+
+ context->getBufferPointerv(targetPacked, pname, params);
+ SetRobustLengthParam(length, numParams);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY
+GetIntegeri_vRobustANGLE(GLenum target, GLuint index, GLsizei bufSize, GLsizei *length, GLint *data)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLuint index = %u, GLsizei bufsize = %d, GLsizei* length = "
+ "0x%0.8p, GLint* data = 0x%0.8p)",
+ target, index, bufSize, length, data);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLsizei numParams = 0;
+ if (!ValidateGetIntegeri_vRobustANGLE(context, target, index, bufSize, &numParams, data))
+ {
+ return;
+ }
+
+ context->getIntegeri_v(target, index, data);
+ SetRobustLengthParam(length, numParams);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetInternalformativRobustANGLE(GLenum target,
+ GLenum internalformat,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLenum internalformat = 0x%X, GLenum pname = 0x%X, GLsizei bufSize "
+ "= %d, GLsizei* length = 0x%0.8p, GLint* params = 0x%0.8p)",
+ target, internalformat, pname, bufSize, length, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLsizei numParams = 0;
+ if (!ValidateGetInternalFormativRobustANGLE(context, target, internalformat, pname, bufSize,
+ &numParams, params))
+ {
+ return;
+ }
+
+ const TextureCaps &formatCaps = context->getTextureCaps().get(internalformat);
+ QueryInternalFormativ(formatCaps, pname, bufSize, params);
+ SetRobustLengthParam(length, numParams);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribIivRobustANGLE(GLuint index,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params)
+{
+ EVENT(
+ "(GLuint index = %u, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
+ "GLint* params = 0x%0.8p)",
+ index, pname, bufSize, length, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLsizei writeLength = 0;
+ if (!ValidateGetVertexAttribIivRobustANGLE(context, index, pname, bufSize, &writeLength,
+ params))
+ {
+ return;
+ }
+
+ context->getVertexAttribIiv(index, pname, params);
+ SetRobustLengthParam(length, writeLength);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribIuivRobustANGLE(GLuint index,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLuint *params)
+{
+ EVENT(
+ "(GLuint index = %u, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
+ "GLuint* params = 0x%0.8p)",
+ index, pname, bufSize, length, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLsizei writeLength = 0;
+ if (!ValidateGetVertexAttribIuivRobustANGLE(context, index, pname, bufSize, &writeLength,
+ params))
+ {
+ return;
+ }
+
+ context->getVertexAttribIuiv(index, pname, params);
+ SetRobustLengthParam(length, writeLength);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetUniformuivRobustANGLE(GLuint program,
+ GLint location,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLuint *params)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location = %d, GLsizei bufsize = %d, GLsizei* length = "
+ "0x%0.8p, GLuint* params = 0x%0.8p)",
+ program, location, bufSize, length, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLsizei writeLength = 0;
+ if (!ValidateGetUniformuivRobustANGLE(context, program, location, bufSize, &writeLength,
+ params))
+ {
+ return;
+ }
+
+ Program *programObject = context->getProgram(program);
+ ASSERT(programObject);
+
+ programObject->getUniformuiv(context, location, params);
+ SetRobustLengthParam(length, writeLength);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetActiveUniformBlockivRobustANGLE(GLuint program,
+ GLuint uniformBlockIndex,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params)
+{
+ EVENT(
+ "(GLuint program = %u, GLuint uniformBlockIndex = %u, GLenum pname = 0x%X, GLsizei bufsize "
+ "= %d, GLsizei* length = 0x%0.8p, GLint* params = 0x%0.8p)",
+ program, uniformBlockIndex, pname, bufSize, length, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLsizei writeLength = 0;
+ if (!ValidateGetActiveUniformBlockivRobustANGLE(context, program, uniformBlockIndex, pname,
+ bufSize, &writeLength, params))
+ {
+ return;
+ }
+
+ const Program *programObject = context->getProgram(program);
+ QueryActiveUniformBlockiv(programObject, uniformBlockIndex, pname, params);
+ SetRobustLengthParam(length, writeLength);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetInteger64vRobustANGLE(GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint64 *data)
+{
+ EVENT(
+ "(GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, GLint64* params = "
+ "0x%0.8p)",
+ pname, bufSize, length, data);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLenum nativeType;
+ unsigned int numParams = 0;
+ if (!ValidateRobustStateQuery(context, pname, bufSize, &nativeType, &numParams))
+ {
+ return;
+ }
+
+ if (nativeType == GL_INT_64_ANGLEX)
+ {
+ context->getInteger64v(pname, data);
+ }
+ else
+ {
+ CastStateValues(context, nativeType, pname, numParams, data);
+ }
+ SetRobustLengthParam(length, numParams);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetInteger64i_vRobustANGLE(GLenum target,
+ GLuint index,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint64 *data)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLuint index = %u, GLsizei bufsize = %d, GLsizei* length = "
+ "0x%0.8p, GLint64* data = 0x%0.8p)",
+ target, index, bufSize, length, data);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLsizei numParams = 0;
+ if (!ValidateGetInteger64i_vRobustANGLE(context, target, index, bufSize, &numParams, data))
+ {
+ return;
+ }
+
+ context->getInteger64i_v(target, index, data);
+ SetRobustLengthParam(length, numParams);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetBufferParameteri64vRobustANGLE(GLenum target,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint64 *params)
+{
+ EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint64* params = 0x%0.8p)", target, pname,
+ bufSize, length, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+
+ GLsizei numParams = 0;
+ if (!ValidateGetBufferParameteri64vRobustANGLE(context, targetPacked, pname, bufSize,
+ &numParams, params))
+ {
+ return;
+ }
+
+ Buffer *buffer = context->getGLState().getTargetBuffer(targetPacked);
+ QueryBufferParameteri64v(buffer, pname, params);
+ SetRobustLengthParam(length, numParams);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY SamplerParameterivRobustANGLE(GLuint sampler,
+ GLenum pname,
+ GLsizei bufSize,
+ const GLint *param)
+{
+ EVENT(
+ "(GLuint sampler = %u, GLenum pname = 0x%X, GLsizei bufsize = %d, const GLint* params = "
+ "0x%0.8p)",
+ sampler, pname, bufSize, param);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!ValidateSamplerParameterivRobustANGLE(context, sampler, pname, bufSize, param))
+ {
+ return;
+ }
+
+ context->samplerParameteriv(sampler, pname, param);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY SamplerParameterfvRobustANGLE(GLuint sampler,
+ GLenum pname,
+ GLsizei bufSize,
+ const GLfloat *param)
+{
+ EVENT(
+ "(GLuint sampler = %u, GLenum pname = 0x%X, GLsizei bufsize = %d, const GLfloat* params = "
+ "0x%0.8p)",
+ sampler, pname, bufSize, param);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!ValidateSamplerParameterfvRobustANGLE(context, sampler, pname, bufSize, param))
+ {
+ return;
+ }
+
+ context->samplerParameterfv(sampler, pname, param);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterivRobustANGLE(GLuint sampler,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params)
+{
+ EVENT(
+ "(GLuint sampler = %u, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
+ "0x%0.8p, GLint* params = 0x%0.8p)",
+ sampler, pname, bufSize, length, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLsizei numParams = 0;
+ if (!ValidateGetSamplerParameterivRobustANGLE(context, sampler, pname, bufSize, &numParams,
+ params))
+ {
+ return;
+ }
+
+ context->getSamplerParameteriv(sampler, pname, params);
+ SetRobustLengthParam(length, numParams);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterfvRobustANGLE(GLuint sampler,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLfloat *params)
+{
+ EVENT(
+ "(GLuint sample = %ur, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
+ "0x%0.8p, GLfloat* params = 0x%0.8p)",
+ sampler, pname, bufSize, length, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLsizei numParams = 0;
+ if (!ValidateGetSamplerParameterfvRobustANGLE(context, sampler, pname, bufSize, &numParams,
+ params))
+ {
+ return;
+ }
+
+ context->getSamplerParameterfv(sampler, pname, params);
+ SetRobustLengthParam(length, numParams);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetFramebufferParameterivRobustANGLE(GLenum target,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
+ "0x%0.8p, GLint* params = 0x%0.8p)",
+ target, pname, bufSize, length, params);
+ UNIMPLEMENTED();
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetProgramInterfaceivRobustANGLE(GLuint program,
+ GLenum programInterface,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params)
+{
+ EVENT(
+ "(GLuint program = %u, GLenum programInterface = 0x%X, GLenum pname = 0x%X, GLsizei "
+ "bufsize = %d, GLsizei* length = 0x%0.8p, GLint* params = 0x%0.8p)",
+ program, programInterface, pname, bufSize, length, params);
+ UNIMPLEMENTED();
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetBooleani_vRobustANGLE(GLenum target,
+ GLuint index,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLboolean *data)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLuint index = %u, GLsizei bufsize = %d, GLsizei* length = "
+ "0x%0.8p, GLboolean* data = 0x%0.8p)",
+ target, index, bufSize, length, data);
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLsizei numParams = 0;
+ if (!ValidateGetBooleani_vRobustANGLE(context, target, index, bufSize, &numParams, data))
+ {
+ return;
+ }
+
+ context->getBooleani_v(target, index, data);
+ SetRobustLengthParam(length, numParams);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetMultisamplefvRobustANGLE(GLenum pname,
+ GLuint index,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLfloat *val)
+{
+ EVENT(
+ "(GLenum pname = 0x%X, GLuint index = %u, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
+ "GLfloat* val = 0x%0.8p)",
+ pname, index, bufSize, length, val);
+ UNIMPLEMENTED();
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetTexLevelParameterivRobustANGLE(GLenum target,
+ GLint level,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLint level = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, "
+ "GLsizei* length = 0x%0.8p, GLint* params = 0x%0.8p)",
+ target, level, pname, bufSize, length, params);
+ UNIMPLEMENTED();
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetTexLevelParameterfvRobustANGLE(GLenum target,
+ GLint level,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLfloat *params)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLint level = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, "
+ "GLsizei* length = 0x%0.8p, GLfloat* params = 0x%0.8p)",
+ target, level, pname, bufSize, length, params);
+ UNIMPLEMENTED();
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetPointervRobustANGLERobustANGLE(GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ void **params)
+{
+ EVENT(
+ "(GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, void **params = "
+ "0x%0.8p)",
+ pname, bufSize, length, params);
+ UNIMPLEMENTED();
+}
+
+ANGLE_EXPORT void GL_APIENTRY ReadnPixelsRobustANGLE(GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLsizei *columns,
+ GLsizei *rows,
+ void *data)
+{
+ EVENT(
+ "(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, "
+ "GLenum format = 0x%X, GLenum type = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
+ "0x%0.8p, GLsizei* columns = 0x%0.8p, GLsizei* rows = 0x%0.8p, void *data = 0x%0.8p)",
+ x, y, width, height, format, type, bufSize, length, columns, rows, data);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLsizei writeLength = 0;
+ GLsizei writeColumns = 0;
+ GLsizei writeRows = 0;
+ if (!ValidateReadnPixelsRobustANGLE(context, x, y, width, height, format, type, bufSize,
+ &writeLength, &writeColumns, &writeRows, data))
+ {
+ return;
+ }
+
+ context->readPixels(x, y, width, height, format, type, data);
+
+ SetRobustLengthParam(length, writeLength);
+ SetRobustLengthParam(columns, writeColumns);
+ SetRobustLengthParam(rows, writeRows);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetnUniformfvRobustANGLE(GLuint program,
+ GLint location,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLfloat *params)
+{
+ EVENT(
+ "(GLuint program = %d, GLint location = %d, GLsizei bufsize = %d, GLsizei* length = "
+ "0x%0.8p, GLfloat* params = 0x%0.8p)",
+ program, location, bufSize, length, params);
+ UNIMPLEMENTED();
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetnUniformivRobustANGLE(GLuint program,
+ GLint location,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params)
+{
+ EVENT(
+ "(GLuint program = %d, GLint location = %d, GLsizei bufsize = %d, GLsizei* length = "
+ "0x%0.8p, GLint* params = 0x%0.8p)",
+ program, location, bufSize, length, params);
+ UNIMPLEMENTED();
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetnUniformuivRobustANGLE(GLuint program,
+ GLint location,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLuint *params)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location = %d, GLsizei bufsize = %d, GLsizei* length = "
+ "0x%0.8p, GLuint* params = 0x%0.8p)",
+ program, location, bufSize, length, params);
+ UNIMPLEMENTED();
+}
+
+ANGLE_EXPORT void GL_APIENTRY TexParameterIivRobustANGLE(GLenum target,
+ GLenum pname,
+ GLsizei bufSize,
+ const GLint *params)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, const GLint *params = "
+ "0x%0.8p)",
+ target, pname, bufSize, params);
+ UNIMPLEMENTED();
+}
+
+ANGLE_EXPORT void GL_APIENTRY TexParameterIuivRobustANGLE(GLenum target,
+ GLenum pname,
+ GLsizei bufSize,
+ const GLuint *params)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, const GLuint *params = "
+ "0x%0.8p)",
+ target, pname, bufSize, params);
+ UNIMPLEMENTED();
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetTexParameterIivRobustANGLE(GLenum target,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
+ "0x%0.8p, GLint *params = 0x%0.8p)",
+ target, pname, bufSize, length, params);
+ UNIMPLEMENTED();
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetTexParameterIuivRobustANGLE(GLenum target,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLuint *params)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
+ "0x%0.8p, GLuint *params = 0x%0.8p)",
+ target, pname, bufSize, length, params);
+ UNIMPLEMENTED();
+}
+
+ANGLE_EXPORT void GL_APIENTRY SamplerParameterIivRobustANGLE(GLuint sampler,
+ GLenum pname,
+ GLsizei bufSize,
+ const GLint *param)
+{
+ EVENT(
+ "(GLuint sampler = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, const GLint *param = "
+ "0x%0.8p)",
+ sampler, pname, bufSize, param);
+ UNIMPLEMENTED();
+}
+
+ANGLE_EXPORT void GL_APIENTRY SamplerParameterIuivRobustANGLE(GLuint sampler,
+ GLenum pname,
+ GLsizei bufSize,
+ const GLuint *param)
+{
+ EVENT(
+ "(GLuint sampler = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, const GLuint *param = "
+ "0x%0.8p)",
+ sampler, pname, bufSize, param);
+ UNIMPLEMENTED();
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterIivRobustANGLE(GLuint sampler,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params)
+{
+ EVENT(
+ "(GLuint sampler = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
+ "0x%0.8p, GLint *params = 0x%0.8p)",
+ sampler, pname, bufSize, length, params);
+ UNIMPLEMENTED();
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterIuivRobustANGLE(GLuint sampler,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLuint *params)
+{
+ EVENT(
+ "(GLuint sampler = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = "
+ "0x%0.8p, GLuint *params = 0x%0.8p)",
+ sampler, pname, bufSize, length, params);
+ UNIMPLEMENTED();
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetQueryObjectivRobustANGLE(GLuint id,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params)
+{
+ EVENT(
+ "(GLuint id = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
+ "GLuint *params = 0x%0.8p)",
+ id, pname, bufSize, length, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLsizei numParams = 0;
+ if (!ValidateGetQueryObjectivRobustANGLE(context, id, pname, bufSize, &numParams, params))
+ {
+ return;
+ }
+
+ context->getQueryObjectiv(id, pname, params);
+ SetRobustLengthParam(length, numParams);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetQueryObjecti64vRobustANGLE(GLuint id,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint64 *params)
+{
+ EVENT(
+ "(GLuint id = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
+ "GLint64 *params = 0x%0.8p)",
+ id, pname, bufSize, length, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLsizei numParams = 0;
+ if (!ValidateGetQueryObjecti64vRobustANGLE(context, id, pname, bufSize, &numParams, params))
+ {
+ return;
+ }
+
+ context->getQueryObjecti64v(id, pname, params);
+ SetRobustLengthParam(length, numParams);
+ }
+}
+
+ANGLE_EXPORT void GL_APIENTRY GetQueryObjectui64vRobustANGLE(GLuint id,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLuint64 *params)
+{
+ EVENT(
+ "(GLuint id = %d, GLenum pname = 0x%X, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, "
+ "GLuint64 *params = 0x%0.8p)",
+ id, pname, bufSize, length, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ GLsizei numParams = 0;
+ if (!ValidateGetQueryObjectui64vRobustANGLE(context, id, pname, bufSize, &numParams,
+ params))
+ {
+ return;
+ }
+
+ context->getQueryObjectui64v(id, pname, params);
+ SetRobustLengthParam(length, numParams);
+ }
+}
+
+GL_APICALL void GL_APIENTRY FramebufferTextureMultiviewLayeredANGLE(GLenum target,
+ GLenum attachment,
+ GLuint texture,
+ GLint level,
+ GLint baseViewIndex,
+ GLsizei numViews)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLenum attachment = 0x%X, GLuint texture = %u, GLint level = %d, "
+ "GLint baseViewIndex = %d, GLsizei numViews = %d)",
+ target, attachment, texture, level, baseViewIndex, numViews);
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() &&
+ !ValidateFramebufferTextureMultiviewLayeredANGLE(context, target, attachment, texture,
+ level, baseViewIndex, numViews))
+ {
+ return;
+ }
+ context->framebufferTextureMultiviewLayeredANGLE(target, attachment, texture, level,
+ baseViewIndex, numViews);
+ }
+}
+
+GL_APICALL void GL_APIENTRY FramebufferTextureMultiviewSideBySideANGLE(GLenum target,
+ GLenum attachment,
+ GLuint texture,
+ GLint level,
+ GLsizei numViews,
+ const GLint *viewportOffsets)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLenum attachment = 0x%X, GLuint texture = %u, GLint level = %d, "
+ "GLsizei numViews = %d, GLsizei* viewportOffsets = 0x%0.8p)",
+ target, attachment, texture, level, numViews, viewportOffsets);
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ if (!context->skipValidation() &&
+ !ValidateFramebufferTextureMultiviewSideBySideANGLE(
+ context, target, attachment, texture, level, numViews, viewportOffsets))
+ {
+ return;
+ }
+ context->framebufferTextureMultiviewSideBySideANGLE(target, attachment, texture, level,
+ numViews, viewportOffsets);
+ }
+}
+
+} // gl
diff --git a/src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0_ext.h b/src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0_ext.h
index a2fb9c5e80..2a3fa607cf 100644
--- a/src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0_ext.h
+++ b/src/3rdparty/angle/src/libGLESv2/entry_points_gles_2_0_ext.h
@@ -17,17 +17,32 @@ namespace gl
{
// GL_ANGLE_framebuffer_blit
-ANGLE_EXPORT void GL_APIENTRY BlitFramebufferANGLE(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+ANGLE_EXPORT void GL_APIENTRY BlitFramebufferANGLE(GLint srcX0,
+ GLint srcY0,
+ GLint srcX1,
+ GLint srcY1,
+ GLint dstX0,
+ GLint dstY0,
+ GLint dstX1,
+ GLint dstY1,
+ GLbitfield mask,
+ GLenum filter);
// GL_ANGLE_framebuffer_multisample
-ANGLE_EXPORT void GL_APIENTRY RenderbufferStorageMultisampleANGLE(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+ANGLE_EXPORT void GL_APIENTRY RenderbufferStorageMultisampleANGLE(GLenum target,
+ GLsizei samples,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height);
// GL_EXT_discard_framebuffer
-ANGLE_EXPORT void GL_APIENTRY DiscardFramebufferEXT(GLenum target, GLsizei numAttachments, const GLenum *attachments);
+ANGLE_EXPORT void GL_APIENTRY DiscardFramebufferEXT(GLenum target,
+ GLsizei numAttachments,
+ const GLenum *attachments);
// GL_NV_fence
-ANGLE_EXPORT void GL_APIENTRY DeleteFencesNV(GLsizei n, const GLuint* fences);
-ANGLE_EXPORT void GL_APIENTRY GenFencesNV(GLsizei n, GLuint* fences);
+ANGLE_EXPORT void GL_APIENTRY DeleteFencesNV(GLsizei n, const GLuint *fences);
+ANGLE_EXPORT void GL_APIENTRY GenFencesNV(GLsizei n, GLuint *fences);
ANGLE_EXPORT GLboolean GL_APIENTRY IsFenceNV(GLuint fence);
ANGLE_EXPORT GLboolean GL_APIENTRY TestFenceNV(GLuint fence);
ANGLE_EXPORT void GL_APIENTRY GetFenceivNV(GLuint fence, GLenum pname, GLint *params);
@@ -35,16 +50,36 @@ ANGLE_EXPORT void GL_APIENTRY FinishFenceNV(GLuint fence);
ANGLE_EXPORT void GL_APIENTRY SetFenceNV(GLuint fence, GLenum condition);
// GL_ANGLE_translated_shader_source
-ANGLE_EXPORT void GL_APIENTRY GetTranslatedShaderSourceANGLE(GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source);
+ANGLE_EXPORT void GL_APIENTRY GetTranslatedShaderSourceANGLE(GLuint shader,
+ GLsizei bufsize,
+ GLsizei *length,
+ GLchar *source);
// GL_EXT_texture_storage
-ANGLE_EXPORT void GL_APIENTRY TexStorage2DEXT(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+ANGLE_EXPORT void GL_APIENTRY TexStorage2DEXT(GLenum target,
+ GLsizei levels,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height);
// GL_EXT_robustness
ANGLE_EXPORT GLenum GL_APIENTRY GetGraphicsResetStatusEXT(void);
-ANGLE_EXPORT void GL_APIENTRY ReadnPixelsEXT(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
-ANGLE_EXPORT void GL_APIENTRY GetnUniformfvEXT(GLuint program, GLint location, GLsizei bufSize, float *params);
-ANGLE_EXPORT void GL_APIENTRY GetnUniformivEXT(GLuint program, GLint location, GLsizei bufSize, GLint *params);
+ANGLE_EXPORT void GL_APIENTRY ReadnPixelsEXT(GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ GLsizei bufSize,
+ void *data);
+ANGLE_EXPORT void GL_APIENTRY GetnUniformfvEXT(GLuint program,
+ GLint location,
+ GLsizei bufSize,
+ float *params);
+ANGLE_EXPORT void GL_APIENTRY GetnUniformivEXT(GLuint program,
+ GLint location,
+ GLsizei bufSize,
+ GLint *params);
// GL_EXT_occlusion_query_boolean
ANGLE_EXPORT void GL_APIENTRY GenQueriesEXT(GLsizei n, GLuint *ids);
@@ -65,22 +100,41 @@ ANGLE_EXPORT void GL_APIENTRY GetQueryObjectui64vEXT(GLuint id, GLenum pname, GL
ANGLE_EXPORT void GL_APIENTRY DrawBuffersEXT(GLsizei n, const GLenum *bufs);
// GL_ANGLE_instanced_arrays
-ANGLE_EXPORT void GL_APIENTRY DrawArraysInstancedANGLE(GLenum mode, GLint first, GLsizei count, GLsizei primcount);
-ANGLE_EXPORT void GL_APIENTRY DrawElementsInstancedANGLE(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
+ANGLE_EXPORT void GL_APIENTRY DrawArraysInstancedANGLE(GLenum mode,
+ GLint first,
+ GLsizei count,
+ GLsizei primcount);
+ANGLE_EXPORT void GL_APIENTRY DrawElementsInstancedANGLE(GLenum mode,
+ GLsizei count,
+ GLenum type,
+ const void *indices,
+ GLsizei primcount);
ANGLE_EXPORT void GL_APIENTRY VertexAttribDivisorANGLE(GLuint index, GLuint divisor);
// GL_OES_get_program_binary
-ANGLE_EXPORT void GL_APIENTRY GetProgramBinaryOES(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary);
-ANGLE_EXPORT void GL_APIENTRY ProgramBinaryOES(GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length);
+ANGLE_EXPORT void GL_APIENTRY GetProgramBinaryOES(GLuint program,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLenum *binaryFormat,
+ void *binary);
+ANGLE_EXPORT void GL_APIENTRY ProgramBinaryOES(GLuint program,
+ GLenum binaryFormat,
+ const void *binary,
+ GLint length);
// GL_OES_mapbuffer
ANGLE_EXPORT void *GL_APIENTRY MapBufferOES(GLenum target, GLenum access);
ANGLE_EXPORT GLboolean GL_APIENTRY UnmapBufferOES(GLenum target);
-ANGLE_EXPORT void GL_APIENTRY GetBufferPointervOES(GLenum target, GLenum pname, GLvoid **params);
+ANGLE_EXPORT void GL_APIENTRY GetBufferPointervOES(GLenum target, GLenum pname, void **params);
// GL_EXT_map_buffer_range
-ANGLE_EXPORT void *GL_APIENTRY MapBufferRangeEXT(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
-ANGLE_EXPORT void GL_APIENTRY FlushMappedBufferRangeEXT(GLenum target, GLintptr offset, GLsizeiptr length);
+ANGLE_EXPORT void *GL_APIENTRY MapBufferRangeEXT(GLenum target,
+ GLintptr offset,
+ GLsizeiptr length,
+ GLbitfield access);
+ANGLE_EXPORT void GL_APIENTRY FlushMappedBufferRangeEXT(GLenum target,
+ GLintptr offset,
+ GLsizeiptr length);
// GL_EXT_debug_marker
ANGLE_EXPORT void GL_APIENTRY InsertEventMarkerEXT(GLsizei length, const char *marker);
@@ -140,6 +194,524 @@ ANGLE_EXPORT void GL_APIENTRY GetObjectPtrLabelKHR(const void *ptr,
GLsizei *length,
GLchar *label);
ANGLE_EXPORT void GL_APIENTRY GetPointervKHR(GLenum pname, void **params);
-}
-#endif // LIBGLESV2_ENTRYPOINTGLES20EXT_H_
+// GL_CHROMIUM_bind_uniform_location
+ANGLE_EXPORT void GL_APIENTRY BindUniformLocationCHROMIUM(GLuint program,
+ GLint location,
+ const GLchar *name);
+
+// GL_CHROMIUM_framebuffer_mixed_samples
+ANGLE_EXPORT void GL_APIENTRY MatrixLoadfCHROMIUM(GLenum matrixMode, const GLfloat *matrix);
+ANGLE_EXPORT void GL_APIENTRY MatrixLoadIdentityCHROMIUM(GLenum matrixMode);
+
+ANGLE_EXPORT void GL_APIENTRY CoverageModulationCHROMIUM(GLenum components);
+
+// GL_CHROMIUM_path_rendering
+ANGLE_EXPORT GLuint GL_APIENTRY GenPathsCHROMIUM(GLsizei chromium);
+ANGLE_EXPORT void GL_APIENTRY DeletePathsCHROMIUM(GLuint first, GLsizei range);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsPathCHROMIUM(GLuint path);
+ANGLE_EXPORT void GL_APIENTRY PathCommandsCHROMIUM(GLuint path,
+ GLsizei numCommands,
+ const GLubyte *commands,
+ GLsizei numCoords,
+ GLenum coordType,
+ const void *coords);
+ANGLE_EXPORT void GL_APIENTRY PathParameterfCHROMIUM(GLuint path, GLenum pname, GLfloat value);
+ANGLE_EXPORT void GL_APIENTRY PathParameteriCHROMIUM(GLuint path, GLenum pname, GLint value);
+ANGLE_EXPORT void GL_APIENTRY GetPathParameterfCHROMIUM(GLuint path, GLenum pname, GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY GetPathParameteriCHROMIUM(GLuint path, GLenum pname, GLint *value);
+ANGLE_EXPORT void GL_APIENTRY PathStencilFuncCHROMIUM(GLenum func, GLint ref, GLuint mask);
+ANGLE_EXPORT void GL_APIENTRY StencilFillPathCHROMIUM(GLuint path, GLenum fillMode, GLuint mask);
+ANGLE_EXPORT void GL_APIENTRY StencilStrokePathCHROMIUM(GLuint path, GLint reference, GLuint mask);
+ANGLE_EXPORT void GL_APIENTRY CoverFillPathCHROMIUM(GLuint path, GLenum coverMode);
+ANGLE_EXPORT void GL_APIENTRY CoverStrokePathCHROMIUM(GLuint path, GLenum coverMode);
+ANGLE_EXPORT void GL_APIENTRY StencilThenCoverFillPathCHROMIUM(GLuint path,
+ GLenum fillMode,
+ GLuint mask,
+ GLenum coverMode);
+ANGLE_EXPORT void GL_APIENTRY StencilThenCoverStrokePathCHROMIUM(GLuint path,
+ GLint reference,
+ GLuint mask,
+ GLenum coverMode);
+ANGLE_EXPORT void GL_APIENTRY CoverFillPathInstancedCHROMIUM(GLsizei numPaths,
+ GLenum pathNameType,
+ const void *paths,
+ GLuint pathBase,
+ GLenum coverMode,
+ GLenum transformType,
+ const GLfloat *transformValues);
+ANGLE_EXPORT void GL_APIENTRY CoverStrokePathInstancedCHROMIUM(GLsizei numPaths,
+ GLenum pathNameType,
+ const void *paths,
+ GLuint pathBase,
+ GLenum coverMode,
+ GLenum transformType,
+ const GLfloat *transformValues);
+ANGLE_EXPORT void GL_APIENTRY StencilFillPathInstancedCHROMIUM(GLsizei numPaths,
+ GLenum pathNameType,
+ const void *paths,
+ GLuint pathBAse,
+ GLenum fillMode,
+ GLuint mask,
+ GLenum transformType,
+ const GLfloat *transformValues);
+ANGLE_EXPORT void GL_APIENTRY StencilStrokePathInstancedCHROMIUM(GLsizei numPaths,
+ GLenum pathNameType,
+ const void *paths,
+ GLuint pathBase,
+ GLint reference,
+ GLuint mask,
+ GLenum transformType,
+ const GLfloat *transformValues);
+ANGLE_EXPORT void GL_APIENTRY
+StencilThenCoverFillPathInstancedCHROMIUM(GLsizei numPaths,
+ GLenum pathNameType,
+ const void *paths,
+ GLuint pathBase,
+ GLenum fillMode,
+ GLuint mask,
+ GLenum coverMode,
+ GLenum transformType,
+ const GLfloat *transformValues);
+ANGLE_EXPORT void GL_APIENTRY
+StencilThenCoverStrokePathInstancedCHROMIUM(GLsizei numPaths,
+ GLenum pathNameType,
+ const void *paths,
+ GLuint pathBase,
+ GLint reference,
+ GLuint mask,
+ GLenum coverMode,
+ GLenum transformType,
+ const GLfloat *transformValues);
+ANGLE_EXPORT void GL_APIENTRY BindFragmentInputLocationCHROMIUM(GLuint program,
+ GLint location,
+ const GLchar *name);
+ANGLE_EXPORT void GL_APIENTRY ProgramPathFragmentInputGenCHROMIUM(GLuint program,
+ GLint location,
+ GLenum genMode,
+ GLint components,
+ const GLfloat *coeffs);
+
+// GL_CHROMIUM_copy_texture
+ANGLE_EXPORT void GL_APIENTRY CopyTextureCHROMIUM(GLuint sourceId,
+ GLint sourceLevel,
+ GLenum destTarget,
+ GLuint destId,
+ GLint destLevel,
+ GLint internalFormat,
+ GLenum destType,
+ GLboolean unpackFlipY,
+ GLboolean unpackPremultiplyAlpha,
+ GLboolean unpackUnmultiplyAlpha);
+
+ANGLE_EXPORT void GL_APIENTRY CopySubTextureCHROMIUM(GLuint sourceId,
+ GLint sourceLevel,
+ GLenum destTarget,
+ GLuint destId,
+ GLint destLevel,
+ GLint xoffset,
+ GLint yoffset,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLboolean unpackFlipY,
+ GLboolean unpackPremultiplyAlpha,
+ GLboolean unpackUnmultiplyAlpha);
+
+// GL_CHROMIUM_copy_compressed_texture
+ANGLE_EXPORT void GL_APIENTRY CompressedCopyTextureCHROMIUM(GLuint sourceId, GLuint destId);
+
+// GL_ANGLE_request_extension
+ANGLE_EXPORT void GL_APIENTRY RequestExtensionANGLE(const GLchar *name);
+
+// GL_ANGLE_robust_client_memory
+ANGLE_EXPORT void GL_APIENTRY GetBooleanvRobustANGLE(GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLboolean *data);
+ANGLE_EXPORT void GL_APIENTRY GetBufferParameterivRobustANGLE(GLenum target,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetFloatvRobustANGLE(GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLfloat *data);
+ANGLE_EXPORT void GL_APIENTRY GetFramebufferAttachmentParameterivRobustANGLE(GLenum target,
+ GLenum attachment,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetIntegervRobustANGLE(GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *data);
+ANGLE_EXPORT void GL_APIENTRY GetProgramivRobustANGLE(GLuint program,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetRenderbufferParameterivRobustANGLE(GLenum target,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetShaderivRobustANGLE(GLuint shader,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetTexParameterfvRobustANGLE(GLenum target,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetTexParameterivRobustANGLE(GLenum target,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetUniformfvRobustANGLE(GLuint program,
+ GLint location,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetUniformivRobustANGLE(GLuint program,
+ GLint location,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribfvRobustANGLE(GLuint index,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribivRobustANGLE(GLuint index,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribPointervRobustANGLE(GLuint index,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ void **pointer);
+ANGLE_EXPORT void GL_APIENTRY ReadPixelsRobustANGLE(GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLsizei *columns,
+ GLsizei *rows,
+ void *pixels);
+ANGLE_EXPORT void GL_APIENTRY TexImage2DRobustANGLE(GLenum target,
+ GLint level,
+ GLint internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLint border,
+ GLenum format,
+ GLenum type,
+ GLsizei bufSize,
+ const void *pixels);
+ANGLE_EXPORT void GL_APIENTRY TexParameterfvRobustANGLE(GLenum target,
+ GLenum pname,
+ GLsizei bufSize,
+ const GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY TexParameterivRobustANGLE(GLenum target,
+ GLenum pname,
+ GLsizei bufSize,
+ const GLint *params);
+ANGLE_EXPORT void GL_APIENTRY TexSubImage2DRobustANGLE(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ GLsizei bufSize,
+ const void *pixels);
+
+ANGLE_EXPORT void GL_APIENTRY TexImage3DRobustANGLE(GLenum target,
+ GLint level,
+ GLint internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth,
+ GLint border,
+ GLenum format,
+ GLenum type,
+ GLsizei bufSize,
+ const void *pixels);
+ANGLE_EXPORT void GL_APIENTRY TexSubImage3DRobustANGLE(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLint zoffset,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth,
+ GLenum format,
+ GLenum type,
+ GLsizei bufSize,
+ const void *pixels);
+
+ANGLE_EXPORT void GL_APIENTRY CompressedTexImage2DRobustANGLE(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLint border,
+ GLsizei imageSize,
+ GLsizei dataSize,
+ const GLvoid *data);
+ANGLE_EXPORT void GL_APIENTRY CompressedTexSubImage2DRobustANGLE(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLsizei imageSize,
+ GLsizei dataSize,
+ const GLvoid *data);
+ANGLE_EXPORT void GL_APIENTRY CompressedTexImage3DRobustANGLE(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth,
+ GLint border,
+ GLsizei imageSize,
+ GLsizei dataSize,
+ const GLvoid *data);
+ANGLE_EXPORT void GL_APIENTRY CompressedTexSubImage3DRobustANGLE(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLint zoffset,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth,
+ GLenum format,
+ GLsizei imageSize,
+ GLsizei dataSize,
+ const GLvoid *data);
+
+ANGLE_EXPORT void GL_APIENTRY
+GetQueryivRobustANGLE(GLenum target, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetQueryObjectuivRobustANGLE(GLuint id,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLuint *params);
+ANGLE_EXPORT void GL_APIENTRY GetBufferPointervRobustANGLE(GLenum target,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ void **params);
+ANGLE_EXPORT void GL_APIENTRY GetIntegeri_vRobustANGLE(GLenum target,
+ GLuint index,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *data);
+ANGLE_EXPORT void GL_APIENTRY GetInternalformativRobustANGLE(GLenum target,
+ GLenum internalformat,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribIivRobustANGLE(GLuint index,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribIuivRobustANGLE(GLuint index,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLuint *params);
+ANGLE_EXPORT void GL_APIENTRY GetUniformuivRobustANGLE(GLuint program,
+ GLint location,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLuint *params);
+ANGLE_EXPORT void GL_APIENTRY GetActiveUniformBlockivRobustANGLE(GLuint program,
+ GLuint uniformBlockIndex,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetInteger64vRobustANGLE(GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint64 *data);
+ANGLE_EXPORT void GL_APIENTRY GetInteger64i_vRobustANGLE(GLenum target,
+ GLuint index,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint64 *data);
+ANGLE_EXPORT void GL_APIENTRY GetBufferParameteri64vRobustANGLE(GLenum target,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint64 *params);
+ANGLE_EXPORT void GL_APIENTRY SamplerParameterivRobustANGLE(GLuint sampler,
+ GLenum pname,
+ GLsizei bufSize,
+ const GLint *param);
+ANGLE_EXPORT void GL_APIENTRY SamplerParameterfvRobustANGLE(GLuint sampler,
+ GLenum pname,
+ GLsizei bufSize,
+ const GLfloat *param);
+ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterivRobustANGLE(GLuint sampler,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterfvRobustANGLE(GLuint sampler,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLfloat *params);
+
+ANGLE_EXPORT void GL_APIENTRY GetFramebufferParameterivRobustANGLE(GLenum target,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetProgramInterfaceivRobustANGLE(GLuint program,
+ GLenum programInterface,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetBooleani_vRobustANGLE(GLenum target,
+ GLuint index,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLboolean *data);
+ANGLE_EXPORT void GL_APIENTRY GetMultisamplefvRobustANGLE(GLenum pname,
+ GLuint index,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLfloat *val);
+ANGLE_EXPORT void GL_APIENTRY GetTexLevelParameterivRobustANGLE(GLenum target,
+ GLint level,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetTexLevelParameterfvRobustANGLE(GLenum target,
+ GLint level,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLfloat *params);
+
+ANGLE_EXPORT void GL_APIENTRY GetPointervRobustANGLERobustANGLE(GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ void **params);
+ANGLE_EXPORT void GL_APIENTRY ReadnPixelsRobustANGLE(GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLsizei *columns,
+ GLsizei *rows,
+ void *data);
+ANGLE_EXPORT void GL_APIENTRY GetnUniformfvRobustANGLE(GLuint program,
+ GLint location,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY GetnUniformivRobustANGLE(GLuint program,
+ GLint location,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetnUniformuivRobustANGLE(GLuint program,
+ GLint location,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLuint *params);
+ANGLE_EXPORT void GL_APIENTRY TexParameterIivRobustANGLE(GLenum target,
+ GLenum pname,
+ GLsizei bufSize,
+ const GLint *params);
+ANGLE_EXPORT void GL_APIENTRY TexParameterIuivRobustANGLE(GLenum target,
+ GLenum pname,
+ GLsizei bufSize,
+ const GLuint *params);
+ANGLE_EXPORT void GL_APIENTRY GetTexParameterIivRobustANGLE(GLenum target,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetTexParameterIuivRobustANGLE(GLenum target,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLuint *params);
+ANGLE_EXPORT void GL_APIENTRY SamplerParameterIivRobustANGLE(GLuint sampler,
+ GLenum pname,
+ GLsizei bufSize,
+ const GLint *param);
+ANGLE_EXPORT void GL_APIENTRY SamplerParameterIuivRobustANGLE(GLuint sampler,
+ GLenum pname,
+ GLsizei bufSize,
+ const GLuint *param);
+ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterIivRobustANGLE(GLuint sampler,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterIuivRobustANGLE(GLuint sampler,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLuint *params);
+ANGLE_EXPORT void GL_APIENTRY GetQueryObjectivRobustANGLE(GLuint id,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetQueryObjecti64vRobustANGLE(GLuint id,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint64 *params);
+ANGLE_EXPORT void GL_APIENTRY GetQueryObjectui64vRobustANGLE(GLuint id,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLuint64 *params);
+
+// GL_ANGLE_multiview
+ANGLE_EXPORT void GL_APIENTRY FramebufferTextureMultiviewLayeredANGLE(GLenum target,
+ GLenum attachment,
+ GLuint texture,
+ GLint level,
+ GLint baseViewIndex,
+ GLsizei numViews);
+ANGLE_EXPORT void GL_APIENTRY
+FramebufferTextureMultiviewSideBySideANGLE(GLenum target,
+ GLenum attachment,
+ GLuint texture,
+ GLint level,
+ GLsizei numViews,
+ const GLint *viewportOffsets);
+} // namespace gl
+
+#endif // LIBGLESV2_ENTRYPOINTGLES20EXT_H_
diff --git a/src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_0.cpp b/src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_0.cpp
deleted file mode 100644
index 856129aa07..0000000000
--- a/src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_0.cpp
+++ /dev/null
@@ -1,3057 +0,0 @@
-//
-// Copyright(c) 2014 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.
-//
-
-// entry_points_gles_3_0.cpp : Implements the GLES 3.0 entry points.
-
-#include "libGLESv2/entry_points_gles_3_0.h"
-#include "libGLESv2/entry_points_gles_2_0_ext.h"
-#include "libGLESv2/global_state.h"
-
-#include "libANGLE/formatutils.h"
-#include "libANGLE/Buffer.h"
-#include "libANGLE/Context.h"
-#include "libANGLE/Error.h"
-#include "libANGLE/Fence.h"
-#include "libANGLE/Framebuffer.h"
-#include "libANGLE/Query.h"
-#include "libANGLE/VertexArray.h"
-
-#include "libANGLE/validationES.h"
-#include "libANGLE/validationES3.h"
-#include "libANGLE/queryconversions.h"
-
-#include "common/debug.h"
-
-namespace gl
-{
-
-void GL_APIENTRY ReadBuffer(GLenum mode)
-{
- EVENT("(GLenum mode = 0x%X)", mode);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!context->skipValidation() && !ValidateReadBuffer(context, mode))
- {
- return;
- }
-
- context->readBuffer(mode);
- }
-}
-
-void GL_APIENTRY DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices)
-{
- EVENT("(GLenum mode = 0x%X, GLuint start = %u, GLuint end = %u, GLsizei count = %d, GLenum type = 0x%X, "
- "const GLvoid* indices = 0x%0.8p)", mode, start, end, count, type, indices);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- IndexRange indexRange;
- if (!ValidateDrawElements(context, mode, count, type, indices, 0, &indexRange))
- {
- return;
- }
- if (indexRange.end > end || indexRange.start < start)
- {
- // GL spec says that behavior in this case is undefined - generating an error is fine.
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- // As long as index validation is done, it doesn't matter whether the context receives a drawElements or
- // a drawRangeElements call - the GL back-end is free to choose to call drawRangeElements based on the
- // validated index range. If index validation is removed, adding drawRangeElements to the context interface
- // should be reconsidered.
- Error error =
- context->drawRangeElements(mode, start, end, count, type, indices, indexRange);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
-}
-
-void GL_APIENTRY TexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels)
-{
- EVENT("(GLenum target = 0x%X, GLint level = %d, GLint internalformat = %d, GLsizei width = %d, "
- "GLsizei height = %d, GLsizei depth = %d, GLint border = %d, GLenum format = 0x%X, "
- "GLenum type = 0x%X, const GLvoid* pixels = 0x%0.8p)",
- target, level, internalformat, width, height, depth, border, format, type, pixels);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- // validateES3TexImageFormat sets the error code if there is an error
- if (!ValidateES3TexImage3DParameters(context, target, level, internalformat, false, false,
- 0, 0, 0, width, height, depth, border, format, type,
- pixels))
- {
- return;
- }
-
- Extents size(width, height, depth);
- Texture *texture = context->getTargetTexture(target);
- Error error = texture->setImage(context, target, level, internalformat, size, format, type,
- reinterpret_cast<const uint8_t *>(pixels));
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
-}
-
-void GL_APIENTRY TexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels)
-{
- EVENT("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
- "GLint zoffset = %d, GLsizei width = %d, GLsizei height = %d, GLsizei depth = %d, "
- "GLenum format = 0x%X, GLenum type = 0x%X, const GLvoid* pixels = 0x%0.8p)",
- target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- // validateES3TexImageFormat sets the error code if there is an error
- if (!ValidateES3TexImage3DParameters(context, target, level, GL_NONE, false, true, xoffset,
- yoffset, zoffset, width, height, depth, 0, format,
- type, pixels))
- {
- return;
- }
-
- // Zero sized uploads are valid but no-ops
- if (width == 0 || height == 0 || depth == 0)
- {
- return;
- }
-
- Box area(xoffset, yoffset, zoffset, width, height, depth);
- Texture *texture = context->getTargetTexture(target);
- Error error = texture->setSubImage(context, target, level, area, format, type,
- reinterpret_cast<const uint8_t *>(pixels));
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
-}
-
-void GL_APIENTRY CopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
-{
- EVENT("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
- "GLint zoffset = %d, GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)",
- target, level, xoffset, yoffset, zoffset, x, y, width, height);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!context->skipValidation() &&
- !ValidateCopyTexSubImage3D(context, target, level, xoffset, yoffset, zoffset, x, y,
- width, height))
- {
- return;
- }
-
- context->copyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height);
- }
-}
-
-void GL_APIENTRY CompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data)
-{
- EVENT("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, GLsizei width = %d, "
- "GLsizei height = %d, GLsizei depth = %d, GLint border = %d, GLsizei imageSize = %d, "
- "const GLvoid* data = 0x%0.8p)",
- target, level, internalformat, width, height, depth, border, imageSize, data);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateCompressedTexImage3D(context, target, level, internalformat, width, height,
- depth, border, imageSize, data))
- {
- return;
- }
-
- Extents size(width, height, depth);
- Texture *texture = context->getTargetTexture(target);
- Error error =
- texture->setCompressedImage(context, target, level, internalformat, size, imageSize,
- reinterpret_cast<const uint8_t *>(data));
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
-}
-
-void GL_APIENTRY CompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data)
-{
- EVENT("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
- "GLint zoffset = %d, GLsizei width = %d, GLsizei height = %d, GLsizei depth = %d, "
- "GLenum format = 0x%X, GLsizei imageSize = %d, const GLvoid* data = 0x%0.8p)",
- target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- const InternalFormat &formatInfo = GetInternalFormatInfo(format);
- if (imageSize < 0 || static_cast<GLuint>(imageSize) != formatInfo.computeBlockSize(GL_UNSIGNED_BYTE, width, height))
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- if (!data)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- // validateES3TexImageFormat sets the error code if there is an error
- if (!ValidateES3TexImage3DParameters(context, target, level, GL_NONE, true, true, 0, 0, 0,
- width, height, depth, 0, GL_NONE, GL_NONE, data))
- {
- return;
- }
-
- // Zero sized uploads are valid but no-ops
- if (width == 0 || height == 0)
- {
- return;
- }
-
- Box area(xoffset, yoffset, zoffset, width, height, depth);
- Texture *texture = context->getTargetTexture(target);
- Error error =
- texture->setCompressedSubImage(context, target, level, area, format, imageSize,
- reinterpret_cast<const uint8_t *>(data));
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
-}
-
-void GL_APIENTRY GenQueries(GLsizei n, GLuint* ids)
-{
- EVENT("(GLsizei n = %d, GLuint* ids = 0x%0.8p)", n, ids);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateGenQueries(context, n, ids))
- {
- return;
- }
-
- for (GLsizei i = 0; i < n; i++)
- {
- ids[i] = context->createQuery();
- }
- }
-}
-
-void GL_APIENTRY DeleteQueries(GLsizei n, const GLuint* ids)
-{
- EVENT("(GLsizei n = %d, GLuint* ids = 0x%0.8p)", n, ids);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateDeleteQueries(context, n, ids))
- {
- return;
- }
-
- for (int i = 0; i < n; i++)
- {
- context->deleteQuery(ids[i]);
- }
- }
-}
-
-GLboolean GL_APIENTRY IsQuery(GLuint id)
-{
- EVENT("(GLuint id = %u)", id);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return GL_FALSE;
- }
-
- return (context->getQuery(id, false, GL_NONE) != NULL) ? GL_TRUE : GL_FALSE;
- }
-
- return GL_FALSE;
-}
-
-void GL_APIENTRY BeginQuery(GLenum target, GLuint id)
-{
- EVENT("(GLenum target = 0x%X, GLuint id = %u)", target, id);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateBeginQuery(context, target, id))
- {
- return;
- }
-
- Error error = context->beginQuery(target, id);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
-}
-
-void GL_APIENTRY EndQuery(GLenum target)
-{
- EVENT("(GLenum target = 0x%X)", target);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateEndQuery(context, target))
- {
- return;
- }
-
- Error error = context->endQuery(target);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
-}
-
-void GL_APIENTRY GetQueryiv(GLenum target, GLenum pname, GLint* params)
-{
- EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", target, pname, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateGetQueryiv(context, target, pname, params))
- {
- return;
- }
-
- context->getQueryiv(target, pname, params);
- }
-}
-
-void GL_APIENTRY GetQueryObjectuiv(GLuint id, GLenum pname, GLuint* params)
-{
- EVENT("(GLuint id = %u, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", id, pname, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateGetQueryObjectuiv(context, id, pname, params))
- {
- return;
- }
-
- Error error = context->getQueryObjectuiv(id, pname, params);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
-}
-
-GLboolean GL_APIENTRY UnmapBuffer(GLenum target)
-{
- EVENT("(GLenum target = 0x%X)", target);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return GL_FALSE;
- }
-
- return UnmapBufferOES(target);
- }
-
- return GL_FALSE;
-}
-
-void GL_APIENTRY GetBufferPointerv(GLenum target, GLenum pname, GLvoid** params)
-{
- EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLvoid** params = 0x%0.8p)", target, pname, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- GetBufferPointervOES(target, pname, params);
- }
-}
-
-void GL_APIENTRY DrawBuffers(GLsizei n, const GLenum* bufs)
-{
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!context->skipValidation() && !ValidateDrawBuffers(context, n, bufs))
- {
- return;
- }
-
- context->drawBuffers(n, bufs);
- }
-}
-
-void GL_APIENTRY UniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
-{
- EVENT("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat* value = 0x%0.8p)",
- location, count, transpose, value);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateUniformMatrix(context, GL_FLOAT_MAT2x3, location, count, transpose))
- {
- return;
- }
-
- Program *program = context->getState().getProgram();
- program->setUniformMatrix2x3fv(location, count, transpose, value);
- }
-}
-
-void GL_APIENTRY UniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
-{
- EVENT("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat* value = 0x%0.8p)",
- location, count, transpose, value);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateUniformMatrix(context, GL_FLOAT_MAT3x2, location, count, transpose))
- {
- return;
- }
-
- Program *program = context->getState().getProgram();
- program->setUniformMatrix3x2fv(location, count, transpose, value);
- }
-}
-
-void GL_APIENTRY UniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
-{
- EVENT("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat* value = 0x%0.8p)",
- location, count, transpose, value);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateUniformMatrix(context, GL_FLOAT_MAT2x4, location, count, transpose))
- {
- return;
- }
-
- Program *program = context->getState().getProgram();
- program->setUniformMatrix2x4fv(location, count, transpose, value);
- }
-}
-
-void GL_APIENTRY UniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
-{
- EVENT("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat* value = 0x%0.8p)",
- location, count, transpose, value);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateUniformMatrix(context, GL_FLOAT_MAT4x2, location, count, transpose))
- {
- return;
- }
-
- Program *program = context->getState().getProgram();
- program->setUniformMatrix4x2fv(location, count, transpose, value);
- }
-}
-
-void GL_APIENTRY UniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
-{
- EVENT("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat* value = 0x%0.8p)",
- location, count, transpose, value);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateUniformMatrix(context, GL_FLOAT_MAT3x4, location, count, transpose))
- {
- return;
- }
-
- Program *program = context->getState().getProgram();
- program->setUniformMatrix3x4fv(location, count, transpose, value);
- }
-}
-
-void GL_APIENTRY UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
-{
- EVENT("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat* value = 0x%0.8p)",
- location, count, transpose, value);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateUniformMatrix(context, GL_FLOAT_MAT4x3, location, count, transpose))
- {
- return;
- }
-
- Program *program = context->getState().getProgram();
- program->setUniformMatrix4x3fv(location, count, transpose, value);
- }
-}
-
-void GL_APIENTRY BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
-{
- EVENT("(GLint srcX0 = %d, GLint srcY0 = %d, GLint srcX1 = %d, GLint srcY1 = %d, GLint dstX0 = %d, "
- "GLint dstY0 = %d, GLint dstX1 = %d, GLint dstY1 = %d, GLbitfield mask = 0x%X, GLenum filter = 0x%X)",
- srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!context->skipValidation() &&
- !ValidateBlitFramebuffer(context, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1,
- dstY1, mask, filter))
- {
- return;
- }
-
- context->blitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask,
- filter);
- }
-}
-
-void GL_APIENTRY RenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
-{
- EVENT("(GLenum target = 0x%X, GLsizei samples = %d, GLenum internalformat = 0x%X, GLsizei width = %d, GLsizei height = %d)",
- target, samples, internalformat, width, height);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (!ValidateES3RenderbufferStorageParameters(context, target, samples, internalformat, width, height))
- {
- return;
- }
-
- Renderbuffer *renderbuffer = context->getState().getCurrentRenderbuffer();
- renderbuffer->setStorageMultisample(samples, internalformat, width, height);
- }
-}
-
-void GL_APIENTRY FramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)
-{
- EVENT("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLuint texture = %u, GLint level = %d, GLint layer = %d)",
- target, attachment, texture, level, layer);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!context->skipValidation() &&
- !ValidateFramebufferTextureLayer(context, target, attachment, texture, level, layer))
- {
- return;
- }
-
- context->framebufferTextureLayer(target, attachment, texture, level, layer);
- }
-}
-
-GLvoid *GL_APIENTRY MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
-{
- EVENT("(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr length = %d, GLbitfield access = 0x%X)",
- target, offset, length, access);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return NULL;
- }
-
- return MapBufferRangeEXT(target, offset, length, access);
- }
-
- return NULL;
-}
-
-void GL_APIENTRY FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)
-{
- EVENT("(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr length = %d)", target, offset, length);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- FlushMappedBufferRangeEXT(target, offset, length);
- }
-}
-
-void GL_APIENTRY BindVertexArray(GLuint array)
-{
- EVENT("(GLuint array = %u)", array);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateBindVertexArray(context, array))
- {
- return;
- }
-
- context->bindVertexArray(array);
- }
-}
-
-void GL_APIENTRY DeleteVertexArrays(GLsizei n, const GLuint* arrays)
-{
- EVENT("(GLsizei n = %d, const GLuint* arrays = 0x%0.8p)", n, arrays);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateDeleteVertexArrays(context, n))
- {
- return;
- }
-
- for (int arrayIndex = 0; arrayIndex < n; arrayIndex++)
- {
- if (arrays[arrayIndex] != 0)
- {
- context->deleteVertexArray(arrays[arrayIndex]);
- }
- }
- }
-}
-
-void GL_APIENTRY GenVertexArrays(GLsizei n, GLuint* arrays)
-{
- EVENT("(GLsizei n = %d, GLuint* arrays = 0x%0.8p)", n, arrays);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateGenVertexArrays(context, n))
- {
- return;
- }
-
- for (int arrayIndex = 0; arrayIndex < n; arrayIndex++)
- {
- arrays[arrayIndex] = context->createVertexArray();
- }
- }
-}
-
-GLboolean GL_APIENTRY IsVertexArray(GLuint array)
-{
- EVENT("(GLuint array = %u)", array);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateIsVertexArray(context))
- {
- return GL_FALSE;
- }
-
- if (array == 0)
- {
- return GL_FALSE;
- }
-
- VertexArray *vao = context->getVertexArray(array);
-
- return (vao != NULL ? GL_TRUE : GL_FALSE);
- }
-
- return GL_FALSE;
-}
-
-void GL_APIENTRY GetIntegeri_v(GLenum target, GLuint index, GLint* data)
-{
- EVENT("(GLenum target = 0x%X, GLuint index = %u, GLint* data = 0x%0.8p)",
- target, index, data);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- const Caps &caps = context->getCaps();
- switch (target)
- {
- case GL_TRANSFORM_FEEDBACK_BUFFER_START:
- case GL_TRANSFORM_FEEDBACK_BUFFER_SIZE:
- case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
- if (index >= caps.maxTransformFeedbackSeparateAttributes)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
- break;
-
- case GL_UNIFORM_BUFFER_START:
- case GL_UNIFORM_BUFFER_SIZE:
- case GL_UNIFORM_BUFFER_BINDING:
- if (index >= caps.maxCombinedUniformBlocks)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- if (!(context->getIndexedIntegerv(target, index, data)))
- {
- GLenum nativeType;
- unsigned int numParams = 0;
- if (!context->getIndexedQueryParameterInfo(target, &nativeType, &numParams))
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- if (numParams == 0)
- {
- return; // it is known that pname is valid, but there are no parameters to return
- }
-
- if (nativeType == GL_INT_64_ANGLEX)
- {
- GLint64 minIntValue = static_cast<GLint64>(std::numeric_limits<int>::min());
- GLint64 maxIntValue = static_cast<GLint64>(std::numeric_limits<int>::max());
- GLint64 *int64Params = new GLint64[numParams];
-
- context->getIndexedInteger64v(target, index, int64Params);
-
- for (unsigned int i = 0; i < numParams; ++i)
- {
- GLint64 clampedValue = std::max(std::min(int64Params[i], maxIntValue), minIntValue);
- data[i] = static_cast<GLint>(clampedValue);
- }
-
- delete [] int64Params;
- }
- else
- {
- UNREACHABLE();
- }
- }
- }
-}
-
-void GL_APIENTRY BeginTransformFeedback(GLenum primitiveMode)
-{
- EVENT("(GLenum primitiveMode = 0x%X)", primitiveMode);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- switch (primitiveMode)
- {
- case GL_TRIANGLES:
- case GL_LINES:
- case GL_POINTS:
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- TransformFeedback *transformFeedback = context->getState().getCurrentTransformFeedback();
- ASSERT(transformFeedback != NULL);
-
- if (transformFeedback->isActive())
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (transformFeedback->isPaused())
- {
- transformFeedback->resume();
- }
- else
- {
- transformFeedback->begin(primitiveMode);
- }
- }
-}
-
-void GL_APIENTRY EndTransformFeedback(void)
-{
- EVENT("(void)");
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- TransformFeedback *transformFeedback = context->getState().getCurrentTransformFeedback();
- ASSERT(transformFeedback != NULL);
-
- if (!transformFeedback->isActive())
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- transformFeedback->end();
- }
-}
-
-void GL_APIENTRY BindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
-{
- EVENT("(GLenum target = 0x%X, GLuint index = %u, GLuint buffer = %u, GLintptr offset = %d, GLsizeiptr size = %d)",
- target, index, buffer, offset, size);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- const Caps &caps = context->getCaps();
- switch (target)
- {
- case GL_TRANSFORM_FEEDBACK_BUFFER:
- if (index >= caps.maxTransformFeedbackSeparateAttributes)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
- break;
-
- case GL_UNIFORM_BUFFER:
- if (index >= caps.maxUniformBufferBindings)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- if (buffer != 0 && size <= 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- switch (target)
- {
- case GL_TRANSFORM_FEEDBACK_BUFFER:
- {
- // size and offset must be a multiple of 4
- if (buffer != 0 && ((offset % 4) != 0 || (size % 4) != 0))
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- // Cannot bind a transform feedback buffer if the current transform feedback is active (3.0.4 pg 91 section 2.15.2)
- TransformFeedback *curTransformFeedback = context->getState().getCurrentTransformFeedback();
- if (curTransformFeedback && curTransformFeedback->isActive())
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- context->bindIndexedTransformFeedbackBuffer(buffer, index, offset, size);
- context->bindGenericTransformFeedbackBuffer(buffer);
- break;
- }
-
- case GL_UNIFORM_BUFFER:
-
- // it is an error to bind an offset not a multiple of the alignment
- if (buffer != 0 && (offset % caps.uniformBufferOffsetAlignment) != 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- context->bindIndexedUniformBuffer(buffer, index, offset, size);
- context->bindGenericUniformBuffer(buffer);
- break;
-
- default:
- UNREACHABLE();
- }
- }
-}
-
-void GL_APIENTRY BindBufferBase(GLenum target, GLuint index, GLuint buffer)
-{
- EVENT("(GLenum target = 0x%X, GLuint index = %u, GLuint buffer = %u)",
- target, index, buffer);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- const Caps &caps = context->getCaps();
- switch (target)
- {
- case GL_TRANSFORM_FEEDBACK_BUFFER:
- if (index >= caps.maxTransformFeedbackSeparateAttributes)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
- break;
-
- case GL_UNIFORM_BUFFER:
- if (index >= caps.maxUniformBufferBindings)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- switch (target)
- {
- case GL_TRANSFORM_FEEDBACK_BUFFER:
- {
- // Cannot bind a transform feedback buffer if the current transform feedback is active (3.0.4 pg 91 section 2.15.2)
- TransformFeedback *curTransformFeedback = context->getState().getCurrentTransformFeedback();
- if (curTransformFeedback && curTransformFeedback->isActive())
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- context->bindIndexedTransformFeedbackBuffer(buffer, index, 0, 0);
- context->bindGenericTransformFeedbackBuffer(buffer);
- break;
- }
- case GL_UNIFORM_BUFFER:
- context->bindIndexedUniformBuffer(buffer, index, 0, 0);
- context->bindGenericUniformBuffer(buffer);
- break;
-
- default:
- UNREACHABLE();
- }
- }
-}
-
-void GL_APIENTRY TransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar* const* varyings, GLenum bufferMode)
-{
- EVENT("(GLuint program = %u, GLsizei count = %d, const GLchar* const* varyings = 0x%0.8p, GLenum bufferMode = 0x%X)",
- program, count, varyings, bufferMode);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (count < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- const Caps &caps = context->getCaps();
- switch (bufferMode)
- {
- case GL_INTERLEAVED_ATTRIBS:
- break;
- case GL_SEPARATE_ATTRIBS:
- if (static_cast<GLuint>(count) > caps.maxTransformFeedbackSeparateAttributes)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
- break;
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- Program *programObject = GetValidProgram(context, program);
- if (!programObject)
- {
- return;
- }
-
- programObject->setTransformFeedbackVaryings(count, varyings, bufferMode);
- }
-}
-
-void GL_APIENTRY GetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name)
-{
- EVENT("(GLuint program = %u, GLuint index = %u, GLsizei bufSize = %d, GLsizei* length = 0x%0.8p, "
- "GLsizei* size = 0x%0.8p, GLenum* type = 0x%0.8p, GLchar* name = 0x%0.8p)",
- program, index, bufSize, length, size, type, name);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (bufSize < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- Program *programObject = GetValidProgram(context, program);
- if (!programObject)
- {
- return;
- }
-
- if (index >= static_cast<GLuint>(programObject->getTransformFeedbackVaryingCount()))
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- programObject->getTransformFeedbackVarying(index, bufSize, length, size, type, name);
- }
-}
-
-void GL_APIENTRY VertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer)
-{
- EVENT("(GLuint index = %u, GLint size = %d, GLenum type = 0x%X, GLsizei stride = %d, const GLvoid* pointer = 0x%0.8p)",
- index, size, type, stride, pointer);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (index >= MAX_VERTEX_ATTRIBS)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- if (size < 1 || size > 4)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- switch (type)
- {
- case GL_BYTE:
- case GL_UNSIGNED_BYTE:
- case GL_SHORT:
- case GL_UNSIGNED_SHORT:
- case GL_INT:
- case GL_UNSIGNED_INT:
- case GL_INT_2_10_10_10_REV:
- case GL_UNSIGNED_INT_2_10_10_10_REV:
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- if (stride < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- if ((type == GL_INT_2_10_10_10_REV || type == GL_UNSIGNED_INT_2_10_10_10_REV) && size != 4)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- // [OpenGL ES 3.0.2] Section 2.8 page 24:
- // An INVALID_OPERATION error is generated when a non-zero vertex array object
- // is bound, zero is bound to the ARRAY_BUFFER buffer object binding point,
- // and the pointer argument is not NULL.
- if (context->getState().getVertexArray()->id() != 0 && context->getState().getArrayBufferId() == 0 && pointer != NULL)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- context->getState().setVertexAttribState(index, context->getState().getTargetBuffer(GL_ARRAY_BUFFER), size, type, false, true,
- stride, pointer);
- }
-}
-
-void GL_APIENTRY GetVertexAttribIiv(GLuint index, GLenum pname, GLint* params)
-{
- EVENT("(GLuint index = %u, GLenum pname = 0x%X, GLint* params = 0x%0.8p)",
- index, pname, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (index >= MAX_VERTEX_ATTRIBS)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- if (!ValidateGetVertexAttribParameters(context, pname))
- {
- return;
- }
-
- if (pname == GL_CURRENT_VERTEX_ATTRIB)
- {
- const VertexAttribCurrentValueData &currentValueData = context->getState().getVertexAttribCurrentValue(index);
- for (int i = 0; i < 4; ++i)
- {
- params[i] = currentValueData.IntValues[i];
- }
- }
- else
- {
- const VertexAttribute &attribState = context->getState().getVertexArray()->getVertexAttribute(index);
- *params = QuerySingleVertexAttributeParameter<GLint>(attribState, pname);
- }
- }
-}
-
-void GL_APIENTRY GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params)
-{
- EVENT("(GLuint index = %u, GLenum pname = 0x%X, GLuint* params = 0x%0.8p)",
- index, pname, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (index >= MAX_VERTEX_ATTRIBS)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- if (!ValidateGetVertexAttribParameters(context, pname))
- {
- return;
- }
-
- if (pname == GL_CURRENT_VERTEX_ATTRIB)
- {
- const VertexAttribCurrentValueData &currentValueData = context->getState().getVertexAttribCurrentValue(index);
- for (int i = 0; i < 4; ++i)
- {
- params[i] = currentValueData.UnsignedIntValues[i];
- }
- }
- else
- {
- const VertexAttribute &attribState = context->getState().getVertexArray()->getVertexAttribute(index);
- *params = QuerySingleVertexAttributeParameter<GLuint>(attribState, pname);
- }
- }
-}
-
-void GL_APIENTRY VertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w)
-{
- EVENT("(GLuint index = %u, GLint x = %d, GLint y = %d, GLint z = %d, GLint w = %d)",
- index, x, y, z, w);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (index >= MAX_VERTEX_ATTRIBS)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- GLint vals[4] = { x, y, z, w };
- context->getState().setVertexAttribi(index, vals);
- }
-}
-
-void GL_APIENTRY VertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
-{
- EVENT("(GLuint index = %u, GLuint x = %u, GLuint y = %u, GLuint z = %u, GLuint w = %u)",
- index, x, y, z, w);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (index >= MAX_VERTEX_ATTRIBS)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- GLuint vals[4] = { x, y, z, w };
- context->getState().setVertexAttribu(index, vals);
- }
-}
-
-void GL_APIENTRY VertexAttribI4iv(GLuint index, const GLint* v)
-{
- EVENT("(GLuint index = %u, const GLint* v = 0x%0.8p)", index, v);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (index >= MAX_VERTEX_ATTRIBS)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- context->getState().setVertexAttribi(index, v);
- }
-}
-
-void GL_APIENTRY VertexAttribI4uiv(GLuint index, const GLuint* v)
-{
- EVENT("(GLuint index = %u, const GLuint* v = 0x%0.8p)", index, v);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (index >= MAX_VERTEX_ATTRIBS)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- context->getState().setVertexAttribu(index, v);
- }
-}
-
-void GL_APIENTRY GetUniformuiv(GLuint program, GLint location, GLuint* params)
-{
- EVENT("(GLuint program = %u, GLint location = %d, GLuint* params = 0x%0.8p)",
- program, location, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateGetUniformuiv(context, program, location, params))
- {
- return;
- }
-
- Program *programObject = context->getProgram(program);
- ASSERT(programObject);
-
- programObject->getUniformuiv(location, params);
- }
-}
-
-GLint GL_APIENTRY GetFragDataLocation(GLuint program, const GLchar *name)
-{
- EVENT("(GLuint program = %u, const GLchar *name = 0x%0.8p)",
- program, name);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return -1;
- }
-
- if (program == 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return -1;
- }
-
- Program *programObject = context->getProgram(program);
-
- if (!programObject || !programObject->isLinked())
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return -1;
- }
-
- return programObject->getFragDataLocation(name);
- }
-
- return 0;
-}
-
-void GL_APIENTRY Uniform1ui(GLint location, GLuint v0)
-{
- Uniform1uiv(location, 1, &v0);
-}
-
-void GL_APIENTRY Uniform2ui(GLint location, GLuint v0, GLuint v1)
-{
- const GLuint xy[] = { v0, v1 };
- Uniform2uiv(location, 1, xy);
-}
-
-void GL_APIENTRY Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2)
-{
- const GLuint xyz[] = { v0, v1, v2 };
- Uniform3uiv(location, 1, xyz);
-}
-
-void GL_APIENTRY Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
-{
- const GLuint xyzw[] = { v0, v1, v2, v3 };
- Uniform4uiv(location, 1, xyzw);
-}
-
-void GL_APIENTRY Uniform1uiv(GLint location, GLsizei count, const GLuint* value)
-{
- EVENT("(GLint location = %d, GLsizei count = %d, const GLuint* value = 0x%0.8p)",
- location, count, value);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateUniform(context, GL_UNSIGNED_INT, location, count))
- {
- return;
- }
-
- Program *program = context->getState().getProgram();
- program->setUniform1uiv(location, count, value);
- }
-}
-
-void GL_APIENTRY Uniform2uiv(GLint location, GLsizei count, const GLuint* value)
-{
- EVENT("(GLint location = %d, GLsizei count = %d, const GLuint* value = 0x%0.8p)",
- location, count, value);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateUniform(context, GL_UNSIGNED_INT_VEC2, location, count))
- {
- return;
- }
-
- Program *program = context->getState().getProgram();
- program->setUniform2uiv(location, count, value);
- }
-}
-
-void GL_APIENTRY Uniform3uiv(GLint location, GLsizei count, const GLuint* value)
-{
- EVENT("(GLint location = %d, GLsizei count = %d, const GLuint* value)",
- location, count, value);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateUniform(context, GL_UNSIGNED_INT_VEC3, location, count))
- {
- return;
- }
-
- Program *program = context->getState().getProgram();
- program->setUniform3uiv(location, count, value);
- }
-}
-
-void GL_APIENTRY Uniform4uiv(GLint location, GLsizei count, const GLuint* value)
-{
- EVENT("(GLint location = %d, GLsizei count = %d, const GLuint* value = 0x%0.8p)",
- location, count, value);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateUniform(context, GL_UNSIGNED_INT_VEC4, location, count))
- {
- return;
- }
-
- Program *program = context->getState().getProgram();
- program->setUniform4uiv(location, count, value);
- }
-}
-
-void GL_APIENTRY ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint* value)
-{
- EVENT("(GLenum buffer = 0x%X, GLint drawbuffer = %d, const GLint* value = 0x%0.8p)",
- buffer, drawbuffer, value);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!context->skipValidation() &&
- !ValidateClearBufferiv(context, buffer, drawbuffer, value))
- {
- return;
- }
-
- context->clearBufferiv(buffer, drawbuffer, value);
- }
-}
-
-void GL_APIENTRY ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint* value)
-{
- EVENT("(GLenum buffer = 0x%X, GLint drawbuffer = %d, const GLuint* value = 0x%0.8p)",
- buffer, drawbuffer, value);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!context->skipValidation() &&
- !ValidateClearBufferuiv(context, buffer, drawbuffer, value))
- {
- return;
- }
-
- context->clearBufferuiv(buffer, drawbuffer, value);
- }
-}
-
-void GL_APIENTRY ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat* value)
-{
- EVENT("(GLenum buffer = 0x%X, GLint drawbuffer = %d, const GLfloat* value = 0x%0.8p)",
- buffer, drawbuffer, value);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!context->skipValidation() &&
- !ValidateClearBufferfv(context, buffer, drawbuffer, value))
- {
- return;
- }
-
- context->clearBufferfv(buffer, drawbuffer, value);
- }
-}
-
-void GL_APIENTRY ClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
-{
- EVENT("(GLenum buffer = 0x%X, GLint drawbuffer = %d, GLfloat depth, GLint stencil = %d)",
- buffer, drawbuffer, depth, stencil);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!context->skipValidation() &&
- !ValidateClearBufferfi(context, buffer, drawbuffer, depth, stencil))
- {
- return;
- }
-
- context->clearBufferfi(buffer, drawbuffer, depth, stencil);
- }
-}
-
-const GLubyte *GL_APIENTRY GetStringi(GLenum name, GLuint index)
-{
- EVENT("(GLenum name = 0x%X, GLuint index = %u)", name, index);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return NULL;
- }
-
- if (name != GL_EXTENSIONS)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return NULL;
- }
-
- if (index >= context->getExtensionStringCount())
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return NULL;
- }
-
- return reinterpret_cast<const GLubyte*>(context->getExtensionString(index).c_str());
- }
-
- return NULL;
-}
-
-void GL_APIENTRY CopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)
-{
- EVENT("(GLenum readTarget = 0x%X, GLenum writeTarget = 0x%X, GLintptr readOffset = %d, GLintptr writeOffset = %d, GLsizeiptr size = %d)",
- readTarget, writeTarget, readOffset, writeOffset, size);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (!ValidBufferTarget(context, readTarget) || !ValidBufferTarget(context, writeTarget))
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- Buffer *readBuffer = context->getState().getTargetBuffer(readTarget);
- Buffer *writeBuffer = context->getState().getTargetBuffer(writeTarget);
-
- if (!readBuffer || !writeBuffer)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- // Verify that readBuffer and writeBuffer are not currently mapped
- if (readBuffer->isMapped() || writeBuffer->isMapped())
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (readOffset < 0 || writeOffset < 0 || size < 0 ||
- static_cast<unsigned int>(readOffset + size) > readBuffer->getSize() ||
- static_cast<unsigned int>(writeOffset + size) > writeBuffer->getSize())
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- if (readBuffer == writeBuffer && std::abs(readOffset - writeOffset) < size)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- // if size is zero, the copy is a successful no-op
- if (size > 0)
- {
- Error error = writeBuffer->copyBufferSubData(readBuffer, readOffset, writeOffset, size);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
- }
-}
-
-void GL_APIENTRY GetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar* const* uniformNames, GLuint* uniformIndices)
-{
- EVENT("(GLuint program = %u, GLsizei uniformCount = %d, const GLchar* const* uniformNames = 0x%0.8p, GLuint* uniformIndices = 0x%0.8p)",
- program, uniformCount, uniformNames, uniformIndices);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (uniformCount < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- Program *programObject = GetValidProgram(context, program);
-
- if (!programObject)
- {
- return;
- }
-
- if (!programObject->isLinked())
- {
- for (int uniformId = 0; uniformId < uniformCount; uniformId++)
- {
- uniformIndices[uniformId] = GL_INVALID_INDEX;
- }
- }
- else
- {
- for (int uniformId = 0; uniformId < uniformCount; uniformId++)
- {
- uniformIndices[uniformId] = programObject->getUniformIndex(uniformNames[uniformId]);
- }
- }
- }
-}
-
-void GL_APIENTRY GetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params)
-{
- EVENT("(GLuint program = %u, GLsizei uniformCount = %d, const GLuint* uniformIndices = 0x%0.8p, GLenum pname = 0x%X, GLint* params = 0x%0.8p)",
- program, uniformCount, uniformIndices, pname, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (uniformCount < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- Program *programObject = GetValidProgram(context, program);
-
- if (!programObject)
- {
- return;
- }
-
- switch (pname)
- {
- case GL_UNIFORM_TYPE:
- case GL_UNIFORM_SIZE:
- case GL_UNIFORM_NAME_LENGTH:
- case GL_UNIFORM_BLOCK_INDEX:
- case GL_UNIFORM_OFFSET:
- case GL_UNIFORM_ARRAY_STRIDE:
- case GL_UNIFORM_MATRIX_STRIDE:
- case GL_UNIFORM_IS_ROW_MAJOR:
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- if (uniformCount > programObject->getActiveUniformCount())
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- for (int uniformId = 0; uniformId < uniformCount; uniformId++)
- {
- const GLuint index = uniformIndices[uniformId];
-
- if (index >= static_cast<GLuint>(programObject->getActiveUniformCount()))
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
- }
-
- for (int uniformId = 0; uniformId < uniformCount; uniformId++)
- {
- const GLuint index = uniformIndices[uniformId];
- params[uniformId] = programObject->getActiveUniformi(index, pname);
- }
- }
-}
-
-GLuint GL_APIENTRY GetUniformBlockIndex(GLuint program, const GLchar* uniformBlockName)
-{
- EVENT("(GLuint program = %u, const GLchar* uniformBlockName = 0x%0.8p)", program, uniformBlockName);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return GL_INVALID_INDEX;
- }
-
- Program *programObject = GetValidProgram(context, program);
- if (!programObject)
- {
- return GL_INVALID_INDEX;
- }
-
- return programObject->getUniformBlockIndex(uniformBlockName);
- }
-
- return 0;
-}
-
-void GL_APIENTRY GetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params)
-{
- EVENT("(GLuint program = %u, GLuint uniformBlockIndex = %u, GLenum pname = 0x%X, GLint* params = 0x%0.8p)",
- program, uniformBlockIndex, pname, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
- Program *programObject = GetValidProgram(context, program);
-
- if (!programObject)
- {
- return;
- }
-
- if (uniformBlockIndex >= programObject->getActiveUniformBlockCount())
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- switch (pname)
- {
- case GL_UNIFORM_BLOCK_BINDING:
- *params = static_cast<GLint>(programObject->getUniformBlockBinding(uniformBlockIndex));
- break;
-
- case GL_UNIFORM_BLOCK_DATA_SIZE:
- case GL_UNIFORM_BLOCK_NAME_LENGTH:
- case GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS:
- case GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES:
- case GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER:
- case GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER:
- programObject->getActiveUniformBlockiv(uniformBlockIndex, pname, params);
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- }
-}
-
-void GL_APIENTRY GetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName)
-{
- EVENT("(GLuint program = %u, GLuint uniformBlockIndex = %u, GLsizei bufSize = %d, GLsizei* length = 0x%0.8p, GLchar* uniformBlockName = 0x%0.8p)",
- program, uniformBlockIndex, bufSize, length, uniformBlockName);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- Program *programObject = GetValidProgram(context, program);
-
- if (!programObject)
- {
- return;
- }
-
- if (uniformBlockIndex >= programObject->getActiveUniformBlockCount())
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- programObject->getActiveUniformBlockName(uniformBlockIndex, bufSize, length, uniformBlockName);
- }
-}
-
-void GL_APIENTRY UniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)
-{
- EVENT("(GLuint program = %u, GLuint uniformBlockIndex = %u, GLuint uniformBlockBinding = %u)",
- program, uniformBlockIndex, uniformBlockBinding);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (uniformBlockBinding >= context->getCaps().maxUniformBufferBindings)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- Program *programObject = GetValidProgram(context, program);
-
- if (!programObject)
- {
- return;
- }
-
- // if never linked, there won't be any uniform blocks
- if (uniformBlockIndex >= programObject->getActiveUniformBlockCount())
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- programObject->bindUniformBlock(uniformBlockIndex, uniformBlockBinding);
- }
-}
-
-void GL_APIENTRY DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount)
-{
- EVENT("(GLenum mode = 0x%X, GLint first = %d, GLsizei count = %d, GLsizei instanceCount = %d)",
- mode, first, count, instanceCount);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (!ValidateDrawArraysInstanced(context, mode, first, count, instanceCount))
- {
- return;
- }
-
- Error error = context->drawArraysInstanced(mode, first, count, instanceCount);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
-}
-
-void GL_APIENTRY DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices, GLsizei instanceCount)
-{
- EVENT("(GLenum mode = 0x%X, GLsizei count = %d, GLenum type = 0x%X, const GLvoid* indices = 0x%0.8p, GLsizei instanceCount = %d)",
- mode, count, type, indices, instanceCount);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- IndexRange indexRange;
- if (!ValidateDrawElementsInstanced(context, mode, count, type, indices, instanceCount, &indexRange))
- {
- return;
- }
-
- Error error =
- context->drawElementsInstanced(mode, count, type, indices, instanceCount, indexRange);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
-}
-
-GLsync GL_APIENTRY FenceSync_(GLenum condition, GLbitfield flags)
-{
- EVENT("(GLenum condition = 0x%X, GLbitfield flags = 0x%X)", condition, flags);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return 0;
- }
-
- if (condition != GL_SYNC_GPU_COMMANDS_COMPLETE)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return 0;
- }
-
- if (flags != 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return 0;
- }
-
- GLsync fenceSync = context->createFenceSync();
-
- FenceSync *fenceSyncObject = context->getFenceSync(fenceSync);
- Error error = fenceSyncObject->set(condition, flags);
- if (error.isError())
- {
- context->deleteFenceSync(fenceSync);
- context->recordError(error);
- return NULL;
- }
-
- return fenceSync;
- }
-
- return NULL;
-}
-
-GLboolean GL_APIENTRY IsSync(GLsync sync)
-{
- EVENT("(GLsync sync = 0x%0.8p)", sync);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return GL_FALSE;
- }
-
- return (context->getFenceSync(sync) != NULL);
- }
-
- return GL_FALSE;
-}
-
-void GL_APIENTRY DeleteSync(GLsync sync)
-{
- EVENT("(GLsync sync = 0x%0.8p)", sync);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (sync != static_cast<GLsync>(0) && !context->getFenceSync(sync))
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- context->deleteFenceSync(sync);
- }
-}
-
-GLenum GL_APIENTRY ClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
-{
- EVENT("(GLsync sync = 0x%0.8p, GLbitfield flags = 0x%X, GLuint64 timeout = %llu)",
- sync, flags, timeout);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return GL_WAIT_FAILED;
- }
-
- if ((flags & ~(GL_SYNC_FLUSH_COMMANDS_BIT)) != 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return GL_WAIT_FAILED;
- }
-
- FenceSync *fenceSync = context->getFenceSync(sync);
-
- if (!fenceSync)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return GL_WAIT_FAILED;
- }
-
- GLenum result = GL_WAIT_FAILED;
- Error error = fenceSync->clientWait(flags, timeout, &result);
- if (error.isError())
- {
- context->recordError(error);
- return GL_WAIT_FAILED;
- }
-
- return result;
- }
-
- return GL_FALSE;
-}
-
-void GL_APIENTRY WaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
-{
- EVENT("(GLsync sync = 0x%0.8p, GLbitfield flags = 0x%X, GLuint64 timeout = %llu)",
- sync, flags, timeout);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (flags != 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- if (timeout != GL_TIMEOUT_IGNORED)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- FenceSync *fenceSync = context->getFenceSync(sync);
-
- if (!fenceSync)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- Error error = fenceSync->serverWait(flags, timeout);
- if (error.isError())
- {
- context->recordError(error);
- }
- }
-}
-
-void GL_APIENTRY GetInteger64v(GLenum pname, GLint64* params)
-{
- EVENT("(GLenum pname = 0x%X, GLint64* params = 0x%0.8p)",
- pname, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- GLenum nativeType;
- unsigned int numParams = 0;
- if (!ValidateStateQuery(context, pname, &nativeType, &numParams))
- {
- return;
- }
-
- if (nativeType == GL_INT_64_ANGLEX)
- {
- context->getInteger64v(pname, params);
- }
- else
- {
- CastStateValues(context, nativeType, pname, numParams, params);
- }
- }
-}
-
-void GL_APIENTRY GetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values)
-{
- EVENT("(GLsync sync = 0x%0.8p, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei* length = 0x%0.8p, GLint* values = 0x%0.8p)",
- sync, pname, bufSize, length, values);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (bufSize < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- FenceSync *fenceSync = context->getFenceSync(sync);
-
- if (!fenceSync)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- switch (pname)
- {
- case GL_OBJECT_TYPE: values[0] = static_cast<GLint>(GL_SYNC_FENCE); break;
- case GL_SYNC_CONDITION: values[0] = static_cast<GLint>(fenceSync->getCondition()); break;
- case GL_SYNC_FLAGS: values[0] = static_cast<GLint>(fenceSync->getFlags()); break;
-
- case GL_SYNC_STATUS:
- {
- Error error = fenceSync->getStatus(values);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- break;
- }
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- }
-}
-
-void GL_APIENTRY GetInteger64i_v(GLenum target, GLuint index, GLint64* data)
-{
- EVENT("(GLenum target = 0x%X, GLuint index = %u, GLint64* data = 0x%0.8p)",
- target, index, data);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- const Caps &caps = context->getCaps();
- switch (target)
- {
- case GL_TRANSFORM_FEEDBACK_BUFFER_START:
- case GL_TRANSFORM_FEEDBACK_BUFFER_SIZE:
- case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
- if (index >= caps.maxTransformFeedbackSeparateAttributes)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
- break;
-
- case GL_UNIFORM_BUFFER_START:
- case GL_UNIFORM_BUFFER_SIZE:
- case GL_UNIFORM_BUFFER_BINDING:
- if (index >= caps.maxUniformBufferBindings)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- if (!(context->getIndexedInteger64v(target, index, data)))
- {
- GLenum nativeType;
- unsigned int numParams = 0;
- if (!context->getIndexedQueryParameterInfo(target, &nativeType, &numParams))
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- if (numParams == 0)
- return; // it is known that pname is valid, but there are no parameters to return
-
- if (nativeType == GL_INT)
- {
- GLint *intParams = new GLint[numParams];
-
- context->getIndexedIntegerv(target, index, intParams);
-
- for (unsigned int i = 0; i < numParams; ++i)
- {
- data[i] = static_cast<GLint64>(intParams[i]);
- }
-
- delete [] intParams;
- }
- else
- {
- UNREACHABLE();
- }
- }
- }
-}
-
-void GL_APIENTRY GetBufferParameteri64v(GLenum target, GLenum pname, GLint64* params)
-{
- EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint64* params = 0x%0.8p)",
- target, pname, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (!ValidBufferTarget(context, target))
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- if (!ValidBufferParameter(context, pname))
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- Buffer *buffer = context->getState().getTargetBuffer(target);
-
- if (!buffer)
- {
- // A null buffer means that "0" is bound to the requested buffer target
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- switch (pname)
- {
- case GL_BUFFER_USAGE:
- *params = static_cast<GLint64>(buffer->getUsage());
- break;
- case GL_BUFFER_SIZE:
- *params = buffer->getSize();
- break;
- case GL_BUFFER_ACCESS_FLAGS:
- *params = static_cast<GLint64>(buffer->getAccessFlags());
- break;
- case GL_BUFFER_MAPPED:
- *params = static_cast<GLint64>(buffer->isMapped());
- break;
- case GL_BUFFER_MAP_OFFSET:
- *params = buffer->getMapOffset();
- break;
- case GL_BUFFER_MAP_LENGTH:
- *params = buffer->getMapLength();
- break;
- default: UNREACHABLE(); break;
- }
- }
-}
-
-void GL_APIENTRY GenSamplers(GLsizei count, GLuint* samplers)
-{
- EVENT("(GLsizei count = %d, GLuint* samplers = 0x%0.8p)", count, samplers);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (count < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- for (int i = 0; i < count; i++)
- {
- samplers[i] = context->createSampler();
- }
- }
-}
-
-void GL_APIENTRY DeleteSamplers(GLsizei count, const GLuint* samplers)
-{
- EVENT("(GLsizei count = %d, const GLuint* samplers = 0x%0.8p)", count, samplers);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (count < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- for (int i = 0; i < count; i++)
- {
- context->deleteSampler(samplers[i]);
- }
- }
-}
-
-GLboolean GL_APIENTRY IsSampler(GLuint sampler)
-{
- EVENT("(GLuint sampler = %u)", sampler);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return GL_FALSE;
- }
-
- return context->isSampler(sampler);
- }
-
- return GL_FALSE;
-}
-
-void GL_APIENTRY BindSampler(GLuint unit, GLuint sampler)
-{
- EVENT("(GLuint unit = %u, GLuint sampler = %u)", unit, sampler);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (sampler != 0 && !context->isSampler(sampler))
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (unit >= context->getCaps().maxCombinedTextureImageUnits)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- context->bindSampler(unit, sampler);
- }
-}
-
-void GL_APIENTRY SamplerParameteri(GLuint sampler, GLenum pname, GLint param)
-{
- EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, GLint param = %d)", sampler, pname, param);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (!ValidateSamplerObjectParameter(context, pname))
- {
- return;
- }
-
- if (!ValidateTexParamParameters(context, pname, param))
- {
- return;
- }
-
- if (!context->isSampler(sampler))
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- context->samplerParameteri(sampler, pname, param);
- }
-}
-
-void GL_APIENTRY SamplerParameteriv(GLuint sampler, GLenum pname, const GLint* param)
-{
- SamplerParameteri(sampler, pname, *param);
-}
-
-void GL_APIENTRY SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
-{
- EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, GLfloat param = %g)", sampler, pname, param);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (!ValidateSamplerObjectParameter(context, pname))
- {
- return;
- }
-
- if (!ValidateTexParamParameters(context, pname, static_cast<GLint>(param)))
- {
- return;
- }
-
- if (!context->isSampler(sampler))
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- context->samplerParameterf(sampler, pname, param);
- }
-}
-
-void GL_APIENTRY SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat* param)
-{
- SamplerParameterf(sampler, pname, *param);
-}
-
-void GL_APIENTRY GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint* params)
-{
- EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", sampler, pname, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (!ValidateSamplerObjectParameter(context, pname))
- {
- return;
- }
-
- if (!context->isSampler(sampler))
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- *params = context->getSamplerParameteri(sampler, pname);
- }
-}
-
-void GL_APIENTRY GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat* params)
-{
- EVENT("(GLuint sample = %ur, GLenum pname = 0x%X, GLfloat* params = 0x%0.8p)", sampler, pname, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (!ValidateSamplerObjectParameter(context, pname))
- {
- return;
- }
-
- if (!context->isSampler(sampler))
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- *params = context->getSamplerParameterf(sampler, pname);
- }
-}
-
-void GL_APIENTRY VertexAttribDivisor(GLuint index, GLuint divisor)
-{
- EVENT("(GLuint index = %u, GLuint divisor = %u)", index, divisor);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (index >= MAX_VERTEX_ATTRIBS)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- context->setVertexAttribDivisor(index, divisor);
- }
-}
-
-void GL_APIENTRY BindTransformFeedback(GLenum target, GLuint id)
-{
- EVENT("(GLenum target = 0x%X, GLuint id = %u)", target, id);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- switch (target)
- {
- case GL_TRANSFORM_FEEDBACK:
- {
- // Cannot bind a transform feedback object if the current one is started and not paused (3.0.2 pg 85 section 2.14.1)
- TransformFeedback *curTransformFeedback = context->getState().getCurrentTransformFeedback();
- if (curTransformFeedback && curTransformFeedback->isActive() && !curTransformFeedback->isPaused())
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- // Cannot bind a transform feedback object that does not exist (3.0.2 pg 85 section 2.14.1)
- if (!context->isTransformFeedbackGenerated(id))
- {
- context->recordError(
- Error(GL_INVALID_OPERATION,
- "Cannot bind a transform feedback object that does not exist."));
- return;
- }
-
- context->bindTransformFeedback(id);
- }
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- }
-}
-
-void GL_APIENTRY DeleteTransformFeedbacks(GLsizei n, const GLuint* ids)
-{
- EVENT("(GLsizei n = %d, const GLuint* ids = 0x%0.8p)", n, ids);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- for (int i = 0; i < n; i++)
- {
- context->deleteTransformFeedback(ids[i]);
- }
- }
-}
-
-void GL_APIENTRY GenTransformFeedbacks(GLsizei n, GLuint* ids)
-{
- EVENT("(GLsizei n = %d, GLuint* ids = 0x%0.8p)", n, ids);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- for (int i = 0; i < n; i++)
- {
- ids[i] = context->createTransformFeedback();
- }
- }
-}
-
-GLboolean GL_APIENTRY IsTransformFeedback(GLuint id)
-{
- EVENT("(GLuint id = %u)", id);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return GL_FALSE;
- }
-
- if (id == 0)
- {
- // The 3.0.4 spec [section 6.1.11] states that if ID is zero, IsTransformFeedback
- // returns FALSE
- return GL_FALSE;
- }
-
- const TransformFeedback *transformFeedback = context->getTransformFeedback(id);
- return ((transformFeedback != nullptr) ? GL_TRUE : GL_FALSE);
- }
-
- return GL_FALSE;
-}
-
-void GL_APIENTRY PauseTransformFeedback(void)
-{
- EVENT("(void)");
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- TransformFeedback *transformFeedback = context->getState().getCurrentTransformFeedback();
- ASSERT(transformFeedback != NULL);
-
- // Current transform feedback must be active and not paused in order to pause (3.0.2 pg 86)
- if (!transformFeedback->isActive() || transformFeedback->isPaused())
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- transformFeedback->pause();
- }
-}
-
-void GL_APIENTRY ResumeTransformFeedback(void)
-{
- EVENT("(void)");
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- TransformFeedback *transformFeedback = context->getState().getCurrentTransformFeedback();
- ASSERT(transformFeedback != NULL);
-
- // Current transform feedback must be active and paused in order to resume (3.0.2 pg 86)
- if (!transformFeedback->isActive() || !transformFeedback->isPaused())
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- transformFeedback->resume();
- }
-}
-
-void GL_APIENTRY GetProgramBinary(GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary)
-{
- EVENT("(GLuint program = %u, GLsizei bufSize = %d, GLsizei* length = 0x%0.8p, GLenum* binaryFormat = 0x%0.8p, GLvoid* binary = 0x%0.8p)",
- program, bufSize, length, binaryFormat, binary);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateGetProgramBinary(context, program, bufSize, length, binaryFormat, binary))
- {
- return;
- }
-
- Program *programObject = context->getProgram(program);
- ASSERT(programObject != nullptr);
-
- Error error = programObject->saveBinary(binaryFormat, binary, bufSize, length);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
-}
-
-void GL_APIENTRY ProgramBinary(GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length)
-{
- EVENT("(GLuint program = %u, GLenum binaryFormat = 0x%X, const GLvoid* binary = 0x%0.8p, GLsizei length = %d)",
- program, binaryFormat, binary, length);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateProgramBinary(context, program, binaryFormat, binary, length))
- {
- return;
- }
-
- Program *programObject = context->getProgram(program);
- ASSERT(programObject != nullptr);
-
- Error error = programObject->loadBinary(binaryFormat, binary, length);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
-}
-
-void GL_APIENTRY ProgramParameteri(GLuint program, GLenum pname, GLint value)
-{
- EVENT("(GLuint program = %u, GLenum pname = 0x%X, GLint value = %d)",
- program, pname, value);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!ValidateProgramParameter(context, program, pname, value))
- {
- return;
- }
-
- gl::Program *programObject = context->getProgram(program);
- ASSERT(programObject != nullptr);
-
- switch (pname)
- {
- case GL_PROGRAM_BINARY_RETRIEVABLE_HINT:
- programObject->setBinaryRetrievableHint(value != GL_FALSE);
- break;
-
- default:
- UNREACHABLE();
- }
- }
-}
-
-void GL_APIENTRY InvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments)
-{
- EVENT("(GLenum target = 0x%X, GLsizei numAttachments = %d, const GLenum* attachments = 0x%0.8p)",
- target, numAttachments, attachments);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!context->skipValidation() &&
- !ValidateInvalidateFramebuffer(context, target, numAttachments, attachments))
- {
- return;
- }
-
- context->invalidateFramebuffer(target, numAttachments, attachments);
- }
-}
-
-void GL_APIENTRY InvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height)
-{
- EVENT("(GLenum target = 0x%X, GLsizei numAttachments = %d, const GLenum* attachments = 0x%0.8p, GLint x = %d, "
- "GLint y = %d, GLsizei width = %d, GLsizei height = %d)",
- target, numAttachments, attachments, x, y, width, height);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (!context->skipValidation() &&
- !ValidateInvalidateFramebuffer(context, target, numAttachments, attachments))
- {
- return;
- }
-
- context->invalidateSubFramebuffer(target, numAttachments, attachments, x, y, width, height);
- }
-}
-
-void GL_APIENTRY TexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
-{
- EVENT("(GLenum target = 0x%X, GLsizei levels = %d, GLenum internalformat = 0x%X, GLsizei width = %d, GLsizei height = %d)",
- target, levels, internalformat, width, height);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (!ValidateES3TexStorage2DParameters(context, target, levels, internalformat, width,
- height, 1))
- {
- return;
- }
-
- Extents size(width, height, 1);
- Texture *texture = context->getTargetTexture(target);
- Error error = texture->setStorage(target, levels, internalformat, size);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
-}
-
-void GL_APIENTRY TexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)
-{
- EVENT("(GLenum target = 0x%X, GLsizei levels = %d, GLenum internalformat = 0x%X, GLsizei width = %d, "
- "GLsizei height = %d, GLsizei depth = %d)",
- target, levels, internalformat, width, height, depth);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- if (!ValidateES3TexStorage3DParameters(context, target, levels, internalformat, width,
- height, depth))
- {
- return;
- }
-
- Extents size(width, height, depth);
- Texture *texture = context->getTargetTexture(target);
- Error error = texture->setStorage(target, levels, internalformat, size);
- if (error.isError())
- {
- context->recordError(error);
- return;
- }
- }
-}
-
-void GL_APIENTRY GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params)
-{
- EVENT("(GLenum target = 0x%X, GLenum internalformat = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, "
- "GLint* params = 0x%0.8p)",
- target, internalformat, pname, bufSize, params);
-
- Context *context = GetValidGlobalContext();
- if (context)
- {
- if (context->getClientVersion() < 3)
- {
- context->recordError(Error(GL_INVALID_OPERATION));
- return;
- }
-
- const TextureCaps &formatCaps = context->getTextureCaps().get(internalformat);
- if (!formatCaps.renderable)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- if (target != GL_RENDERBUFFER)
- {
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
-
- if (bufSize < 0)
- {
- context->recordError(Error(GL_INVALID_VALUE));
- return;
- }
-
- switch (pname)
- {
- case GL_NUM_SAMPLE_COUNTS:
- if (bufSize != 0)
- {
- *params = static_cast<GLint>(formatCaps.sampleCounts.size());
- }
- break;
-
- case GL_SAMPLES:
- {
- size_t returnCount = std::min<size_t>(bufSize, formatCaps.sampleCounts.size());
- auto sampleReverseIt = formatCaps.sampleCounts.rbegin();
- for (size_t sampleIndex = 0; sampleIndex < returnCount; ++sampleIndex)
- {
- params[sampleIndex] = *sampleReverseIt++;;
- }
- }
- break;
-
- default:
- context->recordError(Error(GL_INVALID_ENUM));
- return;
- }
- }
-}
-
-}
diff --git a/src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_0.h b/src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_0.h
deleted file mode 100644
index 09ca0e4641..0000000000
--- a/src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_0.h
+++ /dev/null
@@ -1,125 +0,0 @@
-//
-// Copyright(c) 2014 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.
-//
-
-// entry_points_gles_3_0.h : Defines the GLES 3.0 entry points.
-
-#ifndef LIBGLESV2_ENTRYPOINTGLES30_H_
-#define LIBGLESV2_ENTRYPOINTGLES30_H_
-
-#include <GLES3/gl3.h>
-#include <export.h>
-
-namespace gl
-{
-
-ANGLE_EXPORT void GL_APIENTRY ReadBuffer(GLenum mode);
-ANGLE_EXPORT void GL_APIENTRY DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices);
-ANGLE_EXPORT void GL_APIENTRY TexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels);
-ANGLE_EXPORT void GL_APIENTRY TexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels);
-ANGLE_EXPORT void GL_APIENTRY CopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
-ANGLE_EXPORT void GL_APIENTRY CompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data);
-ANGLE_EXPORT void GL_APIENTRY CompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data);
-ANGLE_EXPORT void GL_APIENTRY GenQueries(GLsizei n, GLuint* ids);
-ANGLE_EXPORT void GL_APIENTRY DeleteQueries(GLsizei n, const GLuint* ids);
-ANGLE_EXPORT GLboolean GL_APIENTRY IsQuery(GLuint id);
-ANGLE_EXPORT void GL_APIENTRY BeginQuery(GLenum target, GLuint id);
-ANGLE_EXPORT void GL_APIENTRY EndQuery(GLenum target);
-ANGLE_EXPORT void GL_APIENTRY GetQueryiv(GLenum target, GLenum pname, GLint* params);
-ANGLE_EXPORT void GL_APIENTRY GetQueryObjectuiv(GLuint id, GLenum pname, GLuint* params);
-ANGLE_EXPORT GLboolean GL_APIENTRY UnmapBuffer(GLenum target);
-ANGLE_EXPORT void GL_APIENTRY GetBufferPointerv(GLenum target, GLenum pname, GLvoid** params);
-ANGLE_EXPORT void GL_APIENTRY DrawBuffers(GLsizei n, const GLenum* bufs);
-ANGLE_EXPORT void GL_APIENTRY UniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
-ANGLE_EXPORT void GL_APIENTRY UniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
-ANGLE_EXPORT void GL_APIENTRY UniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
-ANGLE_EXPORT void GL_APIENTRY UniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
-ANGLE_EXPORT void GL_APIENTRY UniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
-ANGLE_EXPORT void GL_APIENTRY UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
-ANGLE_EXPORT void GL_APIENTRY BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
-ANGLE_EXPORT void GL_APIENTRY RenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
-ANGLE_EXPORT void GL_APIENTRY FramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
-ANGLE_EXPORT GLvoid* GL_APIENTRY MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
-ANGLE_EXPORT void GL_APIENTRY FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length);
-ANGLE_EXPORT void GL_APIENTRY BindVertexArray(GLuint array);
-ANGLE_EXPORT void GL_APIENTRY DeleteVertexArrays(GLsizei n, const GLuint* arrays);
-ANGLE_EXPORT void GL_APIENTRY GenVertexArrays(GLsizei n, GLuint* arrays);
-ANGLE_EXPORT GLboolean GL_APIENTRY IsVertexArray(GLuint array);
-ANGLE_EXPORT void GL_APIENTRY GetIntegeri_v(GLenum target, GLuint index, GLint* data);
-ANGLE_EXPORT void GL_APIENTRY BeginTransformFeedback(GLenum primitiveMode);
-ANGLE_EXPORT void GL_APIENTRY EndTransformFeedback(void);
-ANGLE_EXPORT void GL_APIENTRY BindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
-ANGLE_EXPORT void GL_APIENTRY BindBufferBase(GLenum target, GLuint index, GLuint buffer);
-ANGLE_EXPORT void GL_APIENTRY TransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar* const* varyings, GLenum bufferMode);
-ANGLE_EXPORT void GL_APIENTRY GetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name);
-ANGLE_EXPORT void GL_APIENTRY VertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer);
-ANGLE_EXPORT void GL_APIENTRY GetVertexAttribIiv(GLuint index, GLenum pname, GLint* params);
-ANGLE_EXPORT void GL_APIENTRY GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params);
-ANGLE_EXPORT void GL_APIENTRY VertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w);
-ANGLE_EXPORT void GL_APIENTRY VertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
-ANGLE_EXPORT void GL_APIENTRY VertexAttribI4iv(GLuint index, const GLint* v);
-ANGLE_EXPORT void GL_APIENTRY VertexAttribI4uiv(GLuint index, const GLuint* v);
-ANGLE_EXPORT void GL_APIENTRY GetUniformuiv(GLuint program, GLint location, GLuint* params);
-ANGLE_EXPORT GLint GL_APIENTRY GetFragDataLocation(GLuint program, const GLchar *name);
-ANGLE_EXPORT void GL_APIENTRY Uniform1ui(GLint location, GLuint v0);
-ANGLE_EXPORT void GL_APIENTRY Uniform2ui(GLint location, GLuint v0, GLuint v1);
-ANGLE_EXPORT void GL_APIENTRY Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2);
-ANGLE_EXPORT void GL_APIENTRY Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
-ANGLE_EXPORT void GL_APIENTRY Uniform1uiv(GLint location, GLsizei count, const GLuint* value);
-ANGLE_EXPORT void GL_APIENTRY Uniform2uiv(GLint location, GLsizei count, const GLuint* value);
-ANGLE_EXPORT void GL_APIENTRY Uniform3uiv(GLint location, GLsizei count, const GLuint* value);
-ANGLE_EXPORT void GL_APIENTRY Uniform4uiv(GLint location, GLsizei count, const GLuint* value);
-ANGLE_EXPORT void GL_APIENTRY ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint* value);
-ANGLE_EXPORT void GL_APIENTRY ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint* value);
-ANGLE_EXPORT void GL_APIENTRY ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat* value);
-ANGLE_EXPORT void GL_APIENTRY ClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
-ANGLE_EXPORT const GLubyte *GL_APIENTRY GetStringi(GLenum name, GLuint index);
-ANGLE_EXPORT void GL_APIENTRY CopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
-ANGLE_EXPORT void GL_APIENTRY GetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar* const* uniformNames, GLuint* uniformIndices);
-ANGLE_EXPORT void GL_APIENTRY GetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params);
-ANGLE_EXPORT GLuint GL_APIENTRY GetUniformBlockIndex(GLuint program, const GLchar* uniformBlockName);
-ANGLE_EXPORT void GL_APIENTRY GetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params);
-ANGLE_EXPORT void GL_APIENTRY GetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName);
-ANGLE_EXPORT void GL_APIENTRY UniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
-ANGLE_EXPORT void GL_APIENTRY DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount);
-ANGLE_EXPORT void GL_APIENTRY DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices, GLsizei instanceCount);
-ANGLE_EXPORT GLsync GL_APIENTRY FenceSync_(GLenum condition, GLbitfield flags);
-ANGLE_EXPORT GLboolean GL_APIENTRY IsSync(GLsync sync);
-ANGLE_EXPORT void GL_APIENTRY DeleteSync(GLsync sync);
-ANGLE_EXPORT GLenum GL_APIENTRY ClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout);
-ANGLE_EXPORT void GL_APIENTRY WaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout);
-ANGLE_EXPORT void GL_APIENTRY GetInteger64v(GLenum pname, GLint64* params);
-ANGLE_EXPORT void GL_APIENTRY GetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values);
-ANGLE_EXPORT void GL_APIENTRY GetInteger64i_v(GLenum target, GLuint index, GLint64* data);
-ANGLE_EXPORT void GL_APIENTRY GetBufferParameteri64v(GLenum target, GLenum pname, GLint64* params);
-ANGLE_EXPORT void GL_APIENTRY GenSamplers(GLsizei count, GLuint* samplers);
-ANGLE_EXPORT void GL_APIENTRY DeleteSamplers(GLsizei count, const GLuint* samplers);
-ANGLE_EXPORT GLboolean GL_APIENTRY IsSampler(GLuint sampler);
-ANGLE_EXPORT void GL_APIENTRY BindSampler(GLuint unit, GLuint sampler);
-ANGLE_EXPORT void GL_APIENTRY SamplerParameteri(GLuint sampler, GLenum pname, GLint param);
-ANGLE_EXPORT void GL_APIENTRY SamplerParameteriv(GLuint sampler, GLenum pname, const GLint* param);
-ANGLE_EXPORT void GL_APIENTRY SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param);
-ANGLE_EXPORT void GL_APIENTRY SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat* param);
-ANGLE_EXPORT void GL_APIENTRY GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint* params);
-ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat* params);
-ANGLE_EXPORT void GL_APIENTRY VertexAttribDivisor(GLuint index, GLuint divisor);
-ANGLE_EXPORT void GL_APIENTRY BindTransformFeedback(GLenum target, GLuint id);
-ANGLE_EXPORT void GL_APIENTRY DeleteTransformFeedbacks(GLsizei n, const GLuint* ids);
-ANGLE_EXPORT void GL_APIENTRY GenTransformFeedbacks(GLsizei n, GLuint* ids);
-ANGLE_EXPORT GLboolean GL_APIENTRY IsTransformFeedback(GLuint id);
-ANGLE_EXPORT void GL_APIENTRY PauseTransformFeedback(void);
-ANGLE_EXPORT void GL_APIENTRY ResumeTransformFeedback(void);
-ANGLE_EXPORT void GL_APIENTRY GetProgramBinary(GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary);
-ANGLE_EXPORT void GL_APIENTRY ProgramBinary(GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length);
-ANGLE_EXPORT void GL_APIENTRY ProgramParameteri(GLuint program, GLenum pname, GLint value);
-ANGLE_EXPORT void GL_APIENTRY InvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments);
-ANGLE_EXPORT void GL_APIENTRY InvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height);
-ANGLE_EXPORT void GL_APIENTRY TexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
-ANGLE_EXPORT void GL_APIENTRY TexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
-ANGLE_EXPORT void GL_APIENTRY GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params);
-
-}
-
-#endif // LIBGLESV2_ENTRYPOINTGLES30_H_
diff --git a/src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_0_autogen.cpp b/src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_0_autogen.cpp
new file mode 100644
index 0000000000..439f920bab
--- /dev/null
+++ b/src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_0_autogen.cpp
@@ -0,0 +1,2084 @@
+// GENERATED FILE - DO NOT EDIT.
+// Generated by generate_entry_points.py using data from gl.xml.
+//
+// Copyright 2017 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.
+//
+// entry_points_gles_3_0_autogen.cpp:
+// Defines the GLES 3.0 entry points.
+
+#include "libANGLE/Context.h"
+#include "libANGLE/validationES3.h"
+#include "libGLESv2/global_state.h"
+
+namespace gl
+{
+void GL_APIENTRY ReadBuffer(GLenum src)
+{
+ EVENT("(GLenum src = 0x%X)", src);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ReadBuffer>(src);
+
+ if (context->skipValidation() || ValidateReadBuffer(context, src))
+ {
+ context->readBuffer(src);
+ }
+ }
+}
+
+void GL_APIENTRY DrawRangeElements(GLenum mode,
+ GLuint start,
+ GLuint end,
+ GLsizei count,
+ GLenum type,
+ const void *indices)
+{
+ EVENT(
+ "(GLenum mode = 0x%X, GLuint start = %u, GLuint end = %u, GLsizei count = %d, GLenum type "
+ "= 0x%X, const void *indices = 0x%0.8p)",
+ mode, start, end, count, type, indices);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::DrawRangeElements>(mode, start, end, count, type,
+ indices);
+
+ if (context->skipValidation() ||
+ ValidateDrawRangeElements(context, mode, start, end, count, type, indices))
+ {
+ context->drawRangeElements(mode, start, end, count, type, indices);
+ }
+ }
+}
+
+void GL_APIENTRY TexImage3D(GLenum target,
+ GLint level,
+ GLint internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth,
+ GLint border,
+ GLenum format,
+ GLenum type,
+ const void *pixels)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLint level = %d, GLint internalformat = %d, GLsizei width = %d, "
+ "GLsizei height = %d, GLsizei depth = %d, GLint border = %d, GLenum format = 0x%X, GLenum "
+ "type = 0x%X, const void *pixels = 0x%0.8p)",
+ target, level, internalformat, width, height, depth, border, format, type, pixels);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::TexImage3D>(target, level, internalformat, width, height,
+ depth, border, format, type, pixels);
+
+ if (context->skipValidation() ||
+ ValidateTexImage3D(context, target, level, internalformat, width, height, depth, border,
+ format, type, pixels))
+ {
+ context->texImage3D(target, level, internalformat, width, height, depth, border, format,
+ type, pixels);
+ }
+ }
+}
+
+void GL_APIENTRY TexSubImage3D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLint zoffset,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth,
+ GLenum format,
+ GLenum type,
+ const void *pixels)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, GLint "
+ "zoffset = %d, GLsizei width = %d, GLsizei height = %d, GLsizei depth = %d, GLenum format "
+ "= 0x%X, GLenum type = 0x%X, const void *pixels = 0x%0.8p)",
+ target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::TexSubImage3D>(
+ target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
+
+ if (context->skipValidation() ||
+ ValidateTexSubImage3D(context, target, level, xoffset, yoffset, zoffset, width, height,
+ depth, format, type, pixels))
+ {
+ context->texSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth,
+ format, type, pixels);
+ }
+ }
+}
+
+void GL_APIENTRY CopyTexSubImage3D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLint zoffset,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, GLint "
+ "zoffset = %d, GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)",
+ target, level, xoffset, yoffset, zoffset, x, y, width, height);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::CopyTexSubImage3D>(target, level, xoffset, yoffset,
+ zoffset, x, y, width, height);
+
+ if (context->skipValidation() ||
+ ValidateCopyTexSubImage3D(context, target, level, xoffset, yoffset, zoffset, x, y,
+ width, height))
+ {
+ context->copyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width,
+ height);
+ }
+ }
+}
+
+void GL_APIENTRY CompressedTexImage3D(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth,
+ GLint border,
+ GLsizei imageSize,
+ const void *data)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, GLsizei width = "
+ "%d, GLsizei height = %d, GLsizei depth = %d, GLint border = %d, GLsizei imageSize = %d, "
+ "const void *data = 0x%0.8p)",
+ target, level, internalformat, width, height, depth, border, imageSize, data);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::CompressedTexImage3D>(
+ target, level, internalformat, width, height, depth, border, imageSize, data);
+
+ if (context->skipValidation() ||
+ ValidateCompressedTexImage3D(context, target, level, internalformat, width, height,
+ depth, border, imageSize, data))
+ {
+ context->compressedTexImage3D(target, level, internalformat, width, height, depth,
+ border, imageSize, data);
+ }
+ }
+}
+
+void GL_APIENTRY CompressedTexSubImage3D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLint zoffset,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth,
+ GLenum format,
+ GLsizei imageSize,
+ const void *data)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, GLint "
+ "zoffset = %d, GLsizei width = %d, GLsizei height = %d, GLsizei depth = %d, GLenum format "
+ "= 0x%X, GLsizei imageSize = %d, const void *data = 0x%0.8p)",
+ target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::CompressedTexSubImage3D>(target, level, xoffset, yoffset,
+ zoffset, width, height, depth,
+ format, imageSize, data);
+
+ if (context->skipValidation() ||
+ ValidateCompressedTexSubImage3D(context, target, level, xoffset, yoffset, zoffset,
+ width, height, depth, format, imageSize, data))
+ {
+ context->compressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width,
+ height, depth, format, imageSize, data);
+ }
+ }
+}
+
+void GL_APIENTRY GenQueries(GLsizei n, GLuint *ids)
+{
+ EVENT("(GLsizei n = %d, GLuint *ids = 0x%0.8p)", n, ids);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GenQueries>(n, ids);
+
+ if (context->skipValidation() || ValidateGenQueries(context, n, ids))
+ {
+ context->genQueries(n, ids);
+ }
+ }
+}
+
+void GL_APIENTRY DeleteQueries(GLsizei n, const GLuint *ids)
+{
+ EVENT("(GLsizei n = %d, const GLuint *ids = 0x%0.8p)", n, ids);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::DeleteQueries>(n, ids);
+
+ if (context->skipValidation() || ValidateDeleteQueries(context, n, ids))
+ {
+ context->deleteQueries(n, ids);
+ }
+ }
+}
+
+GLboolean GL_APIENTRY IsQuery(GLuint id)
+{
+ EVENT("(GLuint id = %u)", id);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::IsQuery>(id);
+
+ if (context->skipValidation() || ValidateIsQuery(context, id))
+ {
+ return context->isQuery(id);
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::IsQuery, GLboolean>();
+}
+
+void GL_APIENTRY BeginQuery(GLenum target, GLuint id)
+{
+ EVENT("(GLenum target = 0x%X, GLuint id = %u)", target, id);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::BeginQuery>(target, id);
+
+ if (context->skipValidation() || ValidateBeginQuery(context, target, id))
+ {
+ context->beginQuery(target, id);
+ }
+ }
+}
+
+void GL_APIENTRY EndQuery(GLenum target)
+{
+ EVENT("(GLenum target = 0x%X)", target);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::EndQuery>(target);
+
+ if (context->skipValidation() || ValidateEndQuery(context, target))
+ {
+ context->endQuery(target);
+ }
+ }
+}
+
+void GL_APIENTRY GetQueryiv(GLenum target, GLenum pname, GLint *params)
+{
+ EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", target, pname,
+ params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetQueryiv>(target, pname, params);
+
+ if (context->skipValidation() || ValidateGetQueryiv(context, target, pname, params))
+ {
+ context->getQueryiv(target, pname, params);
+ }
+ }
+}
+
+void GL_APIENTRY GetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params)
+{
+ EVENT("(GLuint id = %u, GLenum pname = 0x%X, GLuint *params = 0x%0.8p)", id, pname, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetQueryObjectuiv>(id, pname, params);
+
+ if (context->skipValidation() || ValidateGetQueryObjectuiv(context, id, pname, params))
+ {
+ context->getQueryObjectuiv(id, pname, params);
+ }
+ }
+}
+
+GLboolean GL_APIENTRY UnmapBuffer(GLenum target)
+{
+ EVENT("(GLenum target = 0x%X)", target);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+ context->gatherParams<EntryPoint::UnmapBuffer>(targetPacked);
+
+ if (context->skipValidation() || ValidateUnmapBuffer(context, targetPacked))
+ {
+ return context->unmapBuffer(targetPacked);
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::UnmapBuffer, GLboolean>();
+}
+
+void GL_APIENTRY GetBufferPointerv(GLenum target, GLenum pname, void **params)
+{
+ EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, void **params = 0x%0.8p)", target, pname,
+ params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+ context->gatherParams<EntryPoint::GetBufferPointerv>(targetPacked, pname, params);
+
+ if (context->skipValidation() ||
+ ValidateGetBufferPointerv(context, targetPacked, pname, params))
+ {
+ context->getBufferPointerv(targetPacked, pname, params);
+ }
+ }
+}
+
+void GL_APIENTRY DrawBuffers(GLsizei n, const GLenum *bufs)
+{
+ EVENT("(GLsizei n = %d, const GLenum *bufs = 0x%0.8p)", n, bufs);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::DrawBuffers>(n, bufs);
+
+ if (context->skipValidation() || ValidateDrawBuffers(context, n, bufs))
+ {
+ context->drawBuffers(n, bufs);
+ }
+ }
+}
+
+void GL_APIENTRY UniformMatrix2x3fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
+{
+ EVENT(
+ "(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat *value "
+ "= 0x%0.8p)",
+ location, count, transpose, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::UniformMatrix2x3fv>(location, count, transpose, value);
+
+ if (context->skipValidation() ||
+ ValidateUniformMatrix2x3fv(context, location, count, transpose, value))
+ {
+ context->uniformMatrix2x3fv(location, count, transpose, value);
+ }
+ }
+}
+
+void GL_APIENTRY UniformMatrix3x2fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
+{
+ EVENT(
+ "(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat *value "
+ "= 0x%0.8p)",
+ location, count, transpose, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::UniformMatrix3x2fv>(location, count, transpose, value);
+
+ if (context->skipValidation() ||
+ ValidateUniformMatrix3x2fv(context, location, count, transpose, value))
+ {
+ context->uniformMatrix3x2fv(location, count, transpose, value);
+ }
+ }
+}
+
+void GL_APIENTRY UniformMatrix2x4fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
+{
+ EVENT(
+ "(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat *value "
+ "= 0x%0.8p)",
+ location, count, transpose, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::UniformMatrix2x4fv>(location, count, transpose, value);
+
+ if (context->skipValidation() ||
+ ValidateUniformMatrix2x4fv(context, location, count, transpose, value))
+ {
+ context->uniformMatrix2x4fv(location, count, transpose, value);
+ }
+ }
+}
+
+void GL_APIENTRY UniformMatrix4x2fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
+{
+ EVENT(
+ "(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat *value "
+ "= 0x%0.8p)",
+ location, count, transpose, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::UniformMatrix4x2fv>(location, count, transpose, value);
+
+ if (context->skipValidation() ||
+ ValidateUniformMatrix4x2fv(context, location, count, transpose, value))
+ {
+ context->uniformMatrix4x2fv(location, count, transpose, value);
+ }
+ }
+}
+
+void GL_APIENTRY UniformMatrix3x4fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
+{
+ EVENT(
+ "(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat *value "
+ "= 0x%0.8p)",
+ location, count, transpose, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::UniformMatrix3x4fv>(location, count, transpose, value);
+
+ if (context->skipValidation() ||
+ ValidateUniformMatrix3x4fv(context, location, count, transpose, value))
+ {
+ context->uniformMatrix3x4fv(location, count, transpose, value);
+ }
+ }
+}
+
+void GL_APIENTRY UniformMatrix4x3fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
+{
+ EVENT(
+ "(GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, const GLfloat *value "
+ "= 0x%0.8p)",
+ location, count, transpose, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::UniformMatrix4x3fv>(location, count, transpose, value);
+
+ if (context->skipValidation() ||
+ ValidateUniformMatrix4x3fv(context, location, count, transpose, value))
+ {
+ context->uniformMatrix4x3fv(location, count, transpose, value);
+ }
+ }
+}
+
+void GL_APIENTRY BlitFramebuffer(GLint srcX0,
+ GLint srcY0,
+ GLint srcX1,
+ GLint srcY1,
+ GLint dstX0,
+ GLint dstY0,
+ GLint dstX1,
+ GLint dstY1,
+ GLbitfield mask,
+ GLenum filter)
+{
+ EVENT(
+ "(GLint srcX0 = %d, GLint srcY0 = %d, GLint srcX1 = %d, GLint srcY1 = %d, GLint dstX0 = "
+ "%d, GLint dstY0 = %d, GLint dstX1 = %d, GLint dstY1 = %d, GLbitfield mask = 0x%X, GLenum "
+ "filter = 0x%X)",
+ srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::BlitFramebuffer>(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0,
+ dstX1, dstY1, mask, filter);
+
+ if (context->skipValidation() ||
+ ValidateBlitFramebuffer(context, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1,
+ mask, filter))
+ {
+ context->blitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask,
+ filter);
+ }
+ }
+}
+
+void GL_APIENTRY RenderbufferStorageMultisample(GLenum target,
+ GLsizei samples,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLsizei samples = %d, GLenum internalformat = 0x%X, GLsizei width "
+ "= %d, GLsizei height = %d)",
+ target, samples, internalformat, width, height);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::RenderbufferStorageMultisample>(
+ target, samples, internalformat, width, height);
+
+ if (context->skipValidation() ||
+ ValidateRenderbufferStorageMultisample(context, target, samples, internalformat, width,
+ height))
+ {
+ context->renderbufferStorageMultisample(target, samples, internalformat, width, height);
+ }
+ }
+}
+
+void GL_APIENTRY
+FramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLenum attachment = 0x%X, GLuint texture = %u, GLint level = %d, "
+ "GLint layer = %d)",
+ target, attachment, texture, level, layer);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::FramebufferTextureLayer>(target, attachment, texture,
+ level, layer);
+
+ if (context->skipValidation() ||
+ ValidateFramebufferTextureLayer(context, target, attachment, texture, level, layer))
+ {
+ context->framebufferTextureLayer(target, attachment, texture, level, layer);
+ }
+ }
+}
+
+void *GL_APIENTRY MapBufferRange(GLenum target,
+ GLintptr offset,
+ GLsizeiptr length,
+ GLbitfield access)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr length = %d, GLbitfield access = "
+ "0x%X)",
+ target, offset, length, access);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+ context->gatherParams<EntryPoint::MapBufferRange>(targetPacked, offset, length, access);
+
+ if (context->skipValidation() ||
+ ValidateMapBufferRange(context, targetPacked, offset, length, access))
+ {
+ return context->mapBufferRange(targetPacked, offset, length, access);
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::MapBufferRange, void *>();
+}
+
+void GL_APIENTRY FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)
+{
+ EVENT("(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr length = %d)", target, offset,
+ length);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+ context->gatherParams<EntryPoint::FlushMappedBufferRange>(targetPacked, offset, length);
+
+ if (context->skipValidation() ||
+ ValidateFlushMappedBufferRange(context, targetPacked, offset, length))
+ {
+ context->flushMappedBufferRange(targetPacked, offset, length);
+ }
+ }
+}
+
+void GL_APIENTRY BindVertexArray(GLuint array)
+{
+ EVENT("(GLuint array = %u)", array);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::BindVertexArray>(array);
+
+ if (context->skipValidation() || ValidateBindVertexArray(context, array))
+ {
+ context->bindVertexArray(array);
+ }
+ }
+}
+
+void GL_APIENTRY DeleteVertexArrays(GLsizei n, const GLuint *arrays)
+{
+ EVENT("(GLsizei n = %d, const GLuint *arrays = 0x%0.8p)", n, arrays);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::DeleteVertexArrays>(n, arrays);
+
+ if (context->skipValidation() || ValidateDeleteVertexArrays(context, n, arrays))
+ {
+ context->deleteVertexArrays(n, arrays);
+ }
+ }
+}
+
+void GL_APIENTRY GenVertexArrays(GLsizei n, GLuint *arrays)
+{
+ EVENT("(GLsizei n = %d, GLuint *arrays = 0x%0.8p)", n, arrays);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GenVertexArrays>(n, arrays);
+
+ if (context->skipValidation() || ValidateGenVertexArrays(context, n, arrays))
+ {
+ context->genVertexArrays(n, arrays);
+ }
+ }
+}
+
+GLboolean GL_APIENTRY IsVertexArray(GLuint array)
+{
+ EVENT("(GLuint array = %u)", array);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::IsVertexArray>(array);
+
+ if (context->skipValidation() || ValidateIsVertexArray(context, array))
+ {
+ return context->isVertexArray(array);
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::IsVertexArray, GLboolean>();
+}
+
+void GL_APIENTRY GetIntegeri_v(GLenum target, GLuint index, GLint *data)
+{
+ EVENT("(GLenum target = 0x%X, GLuint index = %u, GLint *data = 0x%0.8p)", target, index, data);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetIntegeri_v>(target, index, data);
+
+ if (context->skipValidation() || ValidateGetIntegeri_v(context, target, index, data))
+ {
+ context->getIntegeri_v(target, index, data);
+ }
+ }
+}
+
+void GL_APIENTRY BeginTransformFeedback(GLenum primitiveMode)
+{
+ EVENT("(GLenum primitiveMode = 0x%X)", primitiveMode);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::BeginTransformFeedback>(primitiveMode);
+
+ if (context->skipValidation() || ValidateBeginTransformFeedback(context, primitiveMode))
+ {
+ context->beginTransformFeedback(primitiveMode);
+ }
+ }
+}
+
+void GL_APIENTRY EndTransformFeedback()
+{
+ EVENT("()");
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::EndTransformFeedback>();
+
+ if (context->skipValidation() || ValidateEndTransformFeedback(context))
+ {
+ context->endTransformFeedback();
+ }
+ }
+}
+
+void GL_APIENTRY
+BindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLuint index = %u, GLuint buffer = %u, GLintptr offset = %d, "
+ "GLsizeiptr size = %d)",
+ target, index, buffer, offset, size);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+ context->gatherParams<EntryPoint::BindBufferRange>(targetPacked, index, buffer, offset,
+ size);
+
+ if (context->skipValidation() ||
+ ValidateBindBufferRange(context, targetPacked, index, buffer, offset, size))
+ {
+ context->bindBufferRange(targetPacked, index, buffer, offset, size);
+ }
+ }
+}
+
+void GL_APIENTRY BindBufferBase(GLenum target, GLuint index, GLuint buffer)
+{
+ EVENT("(GLenum target = 0x%X, GLuint index = %u, GLuint buffer = %u)", target, index, buffer);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+ context->gatherParams<EntryPoint::BindBufferBase>(targetPacked, index, buffer);
+
+ if (context->skipValidation() ||
+ ValidateBindBufferBase(context, targetPacked, index, buffer))
+ {
+ context->bindBufferBase(targetPacked, index, buffer);
+ }
+ }
+}
+
+void GL_APIENTRY TransformFeedbackVaryings(GLuint program,
+ GLsizei count,
+ const GLchar *const *varyings,
+ GLenum bufferMode)
+{
+ EVENT(
+ "(GLuint program = %u, GLsizei count = %d, const GLchar *const*varyings = 0x%0.8p, GLenum "
+ "bufferMode = 0x%X)",
+ program, count, varyings, bufferMode);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::TransformFeedbackVaryings>(program, count, varyings,
+ bufferMode);
+
+ if (context->skipValidation() ||
+ ValidateTransformFeedbackVaryings(context, program, count, varyings, bufferMode))
+ {
+ context->transformFeedbackVaryings(program, count, varyings, bufferMode);
+ }
+ }
+}
+
+void GL_APIENTRY GetTransformFeedbackVarying(GLuint program,
+ GLuint index,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLsizei *size,
+ GLenum *type,
+ GLchar *name)
+{
+ EVENT(
+ "(GLuint program = %u, GLuint index = %u, GLsizei bufSize = %d, GLsizei *length = 0x%0.8p, "
+ "GLsizei *size = 0x%0.8p, GLenum *type = 0x%0.8p, GLchar *name = 0x%0.8p)",
+ program, index, bufSize, length, size, type, name);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetTransformFeedbackVarying>(program, index, bufSize,
+ length, size, type, name);
+
+ if (context->skipValidation() ||
+ ValidateGetTransformFeedbackVarying(context, program, index, bufSize, length, size,
+ type, name))
+ {
+ context->getTransformFeedbackVarying(program, index, bufSize, length, size, type, name);
+ }
+ }
+}
+
+void GL_APIENTRY
+VertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer)
+{
+ EVENT(
+ "(GLuint index = %u, GLint size = %d, GLenum type = 0x%X, GLsizei stride = %d, const void "
+ "*pointer = 0x%0.8p)",
+ index, size, type, stride, pointer);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::VertexAttribIPointer>(index, size, type, stride, pointer);
+
+ if (context->skipValidation() ||
+ ValidateVertexAttribIPointer(context, index, size, type, stride, pointer))
+ {
+ context->vertexAttribIPointer(index, size, type, stride, pointer);
+ }
+ }
+}
+
+void GL_APIENTRY GetVertexAttribIiv(GLuint index, GLenum pname, GLint *params)
+{
+ EVENT("(GLuint index = %u, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", index, pname,
+ params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetVertexAttribIiv>(index, pname, params);
+
+ if (context->skipValidation() || ValidateGetVertexAttribIiv(context, index, pname, params))
+ {
+ context->getVertexAttribIiv(index, pname, params);
+ }
+ }
+}
+
+void GL_APIENTRY GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint *params)
+{
+ EVENT("(GLuint index = %u, GLenum pname = 0x%X, GLuint *params = 0x%0.8p)", index, pname,
+ params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetVertexAttribIuiv>(index, pname, params);
+
+ if (context->skipValidation() || ValidateGetVertexAttribIuiv(context, index, pname, params))
+ {
+ context->getVertexAttribIuiv(index, pname, params);
+ }
+ }
+}
+
+void GL_APIENTRY VertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w)
+{
+ EVENT("(GLuint index = %u, GLint x = %d, GLint y = %d, GLint z = %d, GLint w = %d)", index, x,
+ y, z, w);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::VertexAttribI4i>(index, x, y, z, w);
+
+ if (context->skipValidation() || ValidateVertexAttribI4i(context, index, x, y, z, w))
+ {
+ context->vertexAttribI4i(index, x, y, z, w);
+ }
+ }
+}
+
+void GL_APIENTRY VertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
+{
+ EVENT("(GLuint index = %u, GLuint x = %u, GLuint y = %u, GLuint z = %u, GLuint w = %u)", index,
+ x, y, z, w);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::VertexAttribI4ui>(index, x, y, z, w);
+
+ if (context->skipValidation() || ValidateVertexAttribI4ui(context, index, x, y, z, w))
+ {
+ context->vertexAttribI4ui(index, x, y, z, w);
+ }
+ }
+}
+
+void GL_APIENTRY VertexAttribI4iv(GLuint index, const GLint *v)
+{
+ EVENT("(GLuint index = %u, const GLint *v = 0x%0.8p)", index, v);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::VertexAttribI4iv>(index, v);
+
+ if (context->skipValidation() || ValidateVertexAttribI4iv(context, index, v))
+ {
+ context->vertexAttribI4iv(index, v);
+ }
+ }
+}
+
+void GL_APIENTRY VertexAttribI4uiv(GLuint index, const GLuint *v)
+{
+ EVENT("(GLuint index = %u, const GLuint *v = 0x%0.8p)", index, v);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::VertexAttribI4uiv>(index, v);
+
+ if (context->skipValidation() || ValidateVertexAttribI4uiv(context, index, v))
+ {
+ context->vertexAttribI4uiv(index, v);
+ }
+ }
+}
+
+void GL_APIENTRY GetUniformuiv(GLuint program, GLint location, GLuint *params)
+{
+ EVENT("(GLuint program = %u, GLint location = %d, GLuint *params = 0x%0.8p)", program, location,
+ params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetUniformuiv>(program, location, params);
+
+ if (context->skipValidation() || ValidateGetUniformuiv(context, program, location, params))
+ {
+ context->getUniformuiv(program, location, params);
+ }
+ }
+}
+
+GLint GL_APIENTRY GetFragDataLocation(GLuint program, const GLchar *name)
+{
+ EVENT("(GLuint program = %u, const GLchar *name = 0x%0.8p)", program, name);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetFragDataLocation>(program, name);
+
+ if (context->skipValidation() || ValidateGetFragDataLocation(context, program, name))
+ {
+ return context->getFragDataLocation(program, name);
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::GetFragDataLocation, GLint>();
+}
+
+void GL_APIENTRY Uniform1ui(GLint location, GLuint v0)
+{
+ EVENT("(GLint location = %d, GLuint v0 = %u)", location, v0);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Uniform1ui>(location, v0);
+
+ if (context->skipValidation() || ValidateUniform1ui(context, location, v0))
+ {
+ context->uniform1ui(location, v0);
+ }
+ }
+}
+
+void GL_APIENTRY Uniform2ui(GLint location, GLuint v0, GLuint v1)
+{
+ EVENT("(GLint location = %d, GLuint v0 = %u, GLuint v1 = %u)", location, v0, v1);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Uniform2ui>(location, v0, v1);
+
+ if (context->skipValidation() || ValidateUniform2ui(context, location, v0, v1))
+ {
+ context->uniform2ui(location, v0, v1);
+ }
+ }
+}
+
+void GL_APIENTRY Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2)
+{
+ EVENT("(GLint location = %d, GLuint v0 = %u, GLuint v1 = %u, GLuint v2 = %u)", location, v0, v1,
+ v2);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Uniform3ui>(location, v0, v1, v2);
+
+ if (context->skipValidation() || ValidateUniform3ui(context, location, v0, v1, v2))
+ {
+ context->uniform3ui(location, v0, v1, v2);
+ }
+ }
+}
+
+void GL_APIENTRY Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
+{
+ EVENT("(GLint location = %d, GLuint v0 = %u, GLuint v1 = %u, GLuint v2 = %u, GLuint v3 = %u)",
+ location, v0, v1, v2, v3);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Uniform4ui>(location, v0, v1, v2, v3);
+
+ if (context->skipValidation() || ValidateUniform4ui(context, location, v0, v1, v2, v3))
+ {
+ context->uniform4ui(location, v0, v1, v2, v3);
+ }
+ }
+}
+
+void GL_APIENTRY Uniform1uiv(GLint location, GLsizei count, const GLuint *value)
+{
+ EVENT("(GLint location = %d, GLsizei count = %d, const GLuint *value = 0x%0.8p)", location,
+ count, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Uniform1uiv>(location, count, value);
+
+ if (context->skipValidation() || ValidateUniform1uiv(context, location, count, value))
+ {
+ context->uniform1uiv(location, count, value);
+ }
+ }
+}
+
+void GL_APIENTRY Uniform2uiv(GLint location, GLsizei count, const GLuint *value)
+{
+ EVENT("(GLint location = %d, GLsizei count = %d, const GLuint *value = 0x%0.8p)", location,
+ count, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Uniform2uiv>(location, count, value);
+
+ if (context->skipValidation() || ValidateUniform2uiv(context, location, count, value))
+ {
+ context->uniform2uiv(location, count, value);
+ }
+ }
+}
+
+void GL_APIENTRY Uniform3uiv(GLint location, GLsizei count, const GLuint *value)
+{
+ EVENT("(GLint location = %d, GLsizei count = %d, const GLuint *value = 0x%0.8p)", location,
+ count, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Uniform3uiv>(location, count, value);
+
+ if (context->skipValidation() || ValidateUniform3uiv(context, location, count, value))
+ {
+ context->uniform3uiv(location, count, value);
+ }
+ }
+}
+
+void GL_APIENTRY Uniform4uiv(GLint location, GLsizei count, const GLuint *value)
+{
+ EVENT("(GLint location = %d, GLsizei count = %d, const GLuint *value = 0x%0.8p)", location,
+ count, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::Uniform4uiv>(location, count, value);
+
+ if (context->skipValidation() || ValidateUniform4uiv(context, location, count, value))
+ {
+ context->uniform4uiv(location, count, value);
+ }
+ }
+}
+
+void GL_APIENTRY ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value)
+{
+ EVENT("(GLenum buffer = 0x%X, GLint drawbuffer = %d, const GLint *value = 0x%0.8p)", buffer,
+ drawbuffer, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ClearBufferiv>(buffer, drawbuffer, value);
+
+ if (context->skipValidation() || ValidateClearBufferiv(context, buffer, drawbuffer, value))
+ {
+ context->clearBufferiv(buffer, drawbuffer, value);
+ }
+ }
+}
+
+void GL_APIENTRY ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value)
+{
+ EVENT("(GLenum buffer = 0x%X, GLint drawbuffer = %d, const GLuint *value = 0x%0.8p)", buffer,
+ drawbuffer, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ClearBufferuiv>(buffer, drawbuffer, value);
+
+ if (context->skipValidation() || ValidateClearBufferuiv(context, buffer, drawbuffer, value))
+ {
+ context->clearBufferuiv(buffer, drawbuffer, value);
+ }
+ }
+}
+
+void GL_APIENTRY ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value)
+{
+ EVENT("(GLenum buffer = 0x%X, GLint drawbuffer = %d, const GLfloat *value = 0x%0.8p)", buffer,
+ drawbuffer, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ClearBufferfv>(buffer, drawbuffer, value);
+
+ if (context->skipValidation() || ValidateClearBufferfv(context, buffer, drawbuffer, value))
+ {
+ context->clearBufferfv(buffer, drawbuffer, value);
+ }
+ }
+}
+
+void GL_APIENTRY ClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
+{
+ EVENT("(GLenum buffer = 0x%X, GLint drawbuffer = %d, GLfloat depth = %f, GLint stencil = %d)",
+ buffer, drawbuffer, depth, stencil);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ClearBufferfi>(buffer, drawbuffer, depth, stencil);
+
+ if (context->skipValidation() ||
+ ValidateClearBufferfi(context, buffer, drawbuffer, depth, stencil))
+ {
+ context->clearBufferfi(buffer, drawbuffer, depth, stencil);
+ }
+ }
+}
+
+const GLubyte *GL_APIENTRY GetStringi(GLenum name, GLuint index)
+{
+ EVENT("(GLenum name = 0x%X, GLuint index = %u)", name, index);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetStringi>(name, index);
+
+ if (context->skipValidation() || ValidateGetStringi(context, name, index))
+ {
+ return context->getStringi(name, index);
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::GetStringi, const GLubyte *>();
+}
+
+void GL_APIENTRY CopyBufferSubData(GLenum readTarget,
+ GLenum writeTarget,
+ GLintptr readOffset,
+ GLintptr writeOffset,
+ GLsizeiptr size)
+{
+ EVENT(
+ "(GLenum readTarget = 0x%X, GLenum writeTarget = 0x%X, GLintptr readOffset = %d, GLintptr "
+ "writeOffset = %d, GLsizeiptr size = %d)",
+ readTarget, writeTarget, readOffset, writeOffset, size);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ BufferBinding readTargetPacked = FromGLenum<BufferBinding>(readTarget);
+ BufferBinding writeTargetPacked = FromGLenum<BufferBinding>(writeTarget);
+ context->gatherParams<EntryPoint::CopyBufferSubData>(readTargetPacked, writeTargetPacked,
+ readOffset, writeOffset, size);
+
+ if (context->skipValidation() ||
+ ValidateCopyBufferSubData(context, readTargetPacked, writeTargetPacked, readOffset,
+ writeOffset, size))
+ {
+ context->copyBufferSubData(readTargetPacked, writeTargetPacked, readOffset, writeOffset,
+ size);
+ }
+ }
+}
+
+void GL_APIENTRY GetUniformIndices(GLuint program,
+ GLsizei uniformCount,
+ const GLchar *const *uniformNames,
+ GLuint *uniformIndices)
+{
+ EVENT(
+ "(GLuint program = %u, GLsizei uniformCount = %d, const GLchar *const*uniformNames = "
+ "0x%0.8p, GLuint *uniformIndices = 0x%0.8p)",
+ program, uniformCount, uniformNames, uniformIndices);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetUniformIndices>(program, uniformCount, uniformNames,
+ uniformIndices);
+
+ if (context->skipValidation() ||
+ ValidateGetUniformIndices(context, program, uniformCount, uniformNames, uniformIndices))
+ {
+ context->getUniformIndices(program, uniformCount, uniformNames, uniformIndices);
+ }
+ }
+}
+
+void GL_APIENTRY GetActiveUniformsiv(GLuint program,
+ GLsizei uniformCount,
+ const GLuint *uniformIndices,
+ GLenum pname,
+ GLint *params)
+{
+ EVENT(
+ "(GLuint program = %u, GLsizei uniformCount = %d, const GLuint *uniformIndices = 0x%0.8p, "
+ "GLenum pname = 0x%X, GLint *params = 0x%0.8p)",
+ program, uniformCount, uniformIndices, pname, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetActiveUniformsiv>(program, uniformCount,
+ uniformIndices, pname, params);
+
+ if (context->skipValidation() || ValidateGetActiveUniformsiv(context, program, uniformCount,
+ uniformIndices, pname, params))
+ {
+ context->getActiveUniformsiv(program, uniformCount, uniformIndices, pname, params);
+ }
+ }
+}
+
+GLuint GL_APIENTRY GetUniformBlockIndex(GLuint program, const GLchar *uniformBlockName)
+{
+ EVENT("(GLuint program = %u, const GLchar *uniformBlockName = 0x%0.8p)", program,
+ uniformBlockName);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetUniformBlockIndex>(program, uniformBlockName);
+
+ if (context->skipValidation() ||
+ ValidateGetUniformBlockIndex(context, program, uniformBlockName))
+ {
+ return context->getUniformBlockIndex(program, uniformBlockName);
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::GetUniformBlockIndex, GLuint>();
+}
+
+void GL_APIENTRY GetActiveUniformBlockiv(GLuint program,
+ GLuint uniformBlockIndex,
+ GLenum pname,
+ GLint *params)
+{
+ EVENT(
+ "(GLuint program = %u, GLuint uniformBlockIndex = %u, GLenum pname = 0x%X, GLint *params = "
+ "0x%0.8p)",
+ program, uniformBlockIndex, pname, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetActiveUniformBlockiv>(program, uniformBlockIndex,
+ pname, params);
+
+ if (context->skipValidation() ||
+ ValidateGetActiveUniformBlockiv(context, program, uniformBlockIndex, pname, params))
+ {
+ context->getActiveUniformBlockiv(program, uniformBlockIndex, pname, params);
+ }
+ }
+}
+
+void GL_APIENTRY GetActiveUniformBlockName(GLuint program,
+ GLuint uniformBlockIndex,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLchar *uniformBlockName)
+{
+ EVENT(
+ "(GLuint program = %u, GLuint uniformBlockIndex = %u, GLsizei bufSize = %d, GLsizei "
+ "*length = 0x%0.8p, GLchar *uniformBlockName = 0x%0.8p)",
+ program, uniformBlockIndex, bufSize, length, uniformBlockName);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetActiveUniformBlockName>(
+ program, uniformBlockIndex, bufSize, length, uniformBlockName);
+
+ if (context->skipValidation() ||
+ ValidateGetActiveUniformBlockName(context, program, uniformBlockIndex, bufSize, length,
+ uniformBlockName))
+ {
+ context->getActiveUniformBlockName(program, uniformBlockIndex, bufSize, length,
+ uniformBlockName);
+ }
+ }
+}
+
+void GL_APIENTRY UniformBlockBinding(GLuint program,
+ GLuint uniformBlockIndex,
+ GLuint uniformBlockBinding)
+{
+ EVENT("(GLuint program = %u, GLuint uniformBlockIndex = %u, GLuint uniformBlockBinding = %u)",
+ program, uniformBlockIndex, uniformBlockBinding);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::UniformBlockBinding>(program, uniformBlockIndex,
+ uniformBlockBinding);
+
+ if (context->skipValidation() ||
+ ValidateUniformBlockBinding(context, program, uniformBlockIndex, uniformBlockBinding))
+ {
+ context->uniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding);
+ }
+ }
+}
+
+void GL_APIENTRY DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instancecount)
+{
+ EVENT("(GLenum mode = 0x%X, GLint first = %d, GLsizei count = %d, GLsizei instancecount = %d)",
+ mode, first, count, instancecount);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::DrawArraysInstanced>(mode, first, count, instancecount);
+
+ if (context->skipValidation() ||
+ ValidateDrawArraysInstanced(context, mode, first, count, instancecount))
+ {
+ context->drawArraysInstanced(mode, first, count, instancecount);
+ }
+ }
+}
+
+void GL_APIENTRY DrawElementsInstanced(GLenum mode,
+ GLsizei count,
+ GLenum type,
+ const void *indices,
+ GLsizei instancecount)
+{
+ EVENT(
+ "(GLenum mode = 0x%X, GLsizei count = %d, GLenum type = 0x%X, const void *indices = "
+ "0x%0.8p, GLsizei instancecount = %d)",
+ mode, count, type, indices, instancecount);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::DrawElementsInstanced>(mode, count, type, indices,
+ instancecount);
+
+ if (context->skipValidation() ||
+ ValidateDrawElementsInstanced(context, mode, count, type, indices, instancecount))
+ {
+ context->drawElementsInstanced(mode, count, type, indices, instancecount);
+ }
+ }
+}
+
+GLsync GL_APIENTRY FenceSync(GLenum condition, GLbitfield flags)
+{
+ EVENT("(GLenum condition = 0x%X, GLbitfield flags = 0x%X)", condition, flags);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::FenceSync>(condition, flags);
+
+ if (context->skipValidation() || ValidateFenceSync(context, condition, flags))
+ {
+ return context->fenceSync(condition, flags);
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::FenceSync, GLsync>();
+}
+
+GLboolean GL_APIENTRY IsSync(GLsync sync)
+{
+ EVENT("(GLsync sync = 0x%0.8p)", sync);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::IsSync>(sync);
+
+ if (context->skipValidation() || ValidateIsSync(context, sync))
+ {
+ return context->isSync(sync);
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::IsSync, GLboolean>();
+}
+
+void GL_APIENTRY DeleteSync(GLsync sync)
+{
+ EVENT("(GLsync sync = 0x%0.8p)", sync);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::DeleteSync>(sync);
+
+ if (context->skipValidation() || ValidateDeleteSync(context, sync))
+ {
+ context->deleteSync(sync);
+ }
+ }
+}
+
+GLenum GL_APIENTRY ClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
+{
+ EVENT("(GLsync sync = 0x%0.8p, GLbitfield flags = 0x%X, GLuint64 timeout = %llu)", sync, flags,
+ timeout);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ClientWaitSync>(sync, flags, timeout);
+
+ if (context->skipValidation() || ValidateClientWaitSync(context, sync, flags, timeout))
+ {
+ return context->clientWaitSync(sync, flags, timeout);
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::ClientWaitSync, GLenum>();
+}
+
+void GL_APIENTRY WaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
+{
+ EVENT("(GLsync sync = 0x%0.8p, GLbitfield flags = 0x%X, GLuint64 timeout = %llu)", sync, flags,
+ timeout);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::WaitSync>(sync, flags, timeout);
+
+ if (context->skipValidation() || ValidateWaitSync(context, sync, flags, timeout))
+ {
+ context->waitSync(sync, flags, timeout);
+ }
+ }
+}
+
+void GL_APIENTRY GetInteger64v(GLenum pname, GLint64 *data)
+{
+ EVENT("(GLenum pname = 0x%X, GLint64 *data = 0x%0.8p)", pname, data);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetInteger64v>(pname, data);
+
+ if (context->skipValidation() || ValidateGetInteger64v(context, pname, data))
+ {
+ context->getInteger64v(pname, data);
+ }
+ }
+}
+
+void GL_APIENTRY
+GetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values)
+{
+ EVENT(
+ "(GLsync sync = 0x%0.8p, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei *length = "
+ "0x%0.8p, GLint *values = 0x%0.8p)",
+ sync, pname, bufSize, length, values);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetSynciv>(sync, pname, bufSize, length, values);
+
+ if (context->skipValidation() ||
+ ValidateGetSynciv(context, sync, pname, bufSize, length, values))
+ {
+ context->getSynciv(sync, pname, bufSize, length, values);
+ }
+ }
+}
+
+void GL_APIENTRY GetInteger64i_v(GLenum target, GLuint index, GLint64 *data)
+{
+ EVENT("(GLenum target = 0x%X, GLuint index = %u, GLint64 *data = 0x%0.8p)", target, index,
+ data);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetInteger64i_v>(target, index, data);
+
+ if (context->skipValidation() || ValidateGetInteger64i_v(context, target, index, data))
+ {
+ context->getInteger64i_v(target, index, data);
+ }
+ }
+}
+
+void GL_APIENTRY GetBufferParameteri64v(GLenum target, GLenum pname, GLint64 *params)
+{
+ EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint64 *params = 0x%0.8p)", target, pname,
+ params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ BufferBinding targetPacked = FromGLenum<BufferBinding>(target);
+ context->gatherParams<EntryPoint::GetBufferParameteri64v>(targetPacked, pname, params);
+
+ if (context->skipValidation() ||
+ ValidateGetBufferParameteri64v(context, targetPacked, pname, params))
+ {
+ context->getBufferParameteri64v(targetPacked, pname, params);
+ }
+ }
+}
+
+void GL_APIENTRY GenSamplers(GLsizei count, GLuint *samplers)
+{
+ EVENT("(GLsizei count = %d, GLuint *samplers = 0x%0.8p)", count, samplers);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GenSamplers>(count, samplers);
+
+ if (context->skipValidation() || ValidateGenSamplers(context, count, samplers))
+ {
+ context->genSamplers(count, samplers);
+ }
+ }
+}
+
+void GL_APIENTRY DeleteSamplers(GLsizei count, const GLuint *samplers)
+{
+ EVENT("(GLsizei count = %d, const GLuint *samplers = 0x%0.8p)", count, samplers);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::DeleteSamplers>(count, samplers);
+
+ if (context->skipValidation() || ValidateDeleteSamplers(context, count, samplers))
+ {
+ context->deleteSamplers(count, samplers);
+ }
+ }
+}
+
+GLboolean GL_APIENTRY IsSampler(GLuint sampler)
+{
+ EVENT("(GLuint sampler = %u)", sampler);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::IsSampler>(sampler);
+
+ if (context->skipValidation() || ValidateIsSampler(context, sampler))
+ {
+ return context->isSampler(sampler);
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::IsSampler, GLboolean>();
+}
+
+void GL_APIENTRY BindSampler(GLuint unit, GLuint sampler)
+{
+ EVENT("(GLuint unit = %u, GLuint sampler = %u)", unit, sampler);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::BindSampler>(unit, sampler);
+
+ if (context->skipValidation() || ValidateBindSampler(context, unit, sampler))
+ {
+ context->bindSampler(unit, sampler);
+ }
+ }
+}
+
+void GL_APIENTRY SamplerParameteri(GLuint sampler, GLenum pname, GLint param)
+{
+ EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, GLint param = %d)", sampler, pname, param);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::SamplerParameteri>(sampler, pname, param);
+
+ if (context->skipValidation() || ValidateSamplerParameteri(context, sampler, pname, param))
+ {
+ context->samplerParameteri(sampler, pname, param);
+ }
+ }
+}
+
+void GL_APIENTRY SamplerParameteriv(GLuint sampler, GLenum pname, const GLint *param)
+{
+ EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, const GLint *param = 0x%0.8p)", sampler,
+ pname, param);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::SamplerParameteriv>(sampler, pname, param);
+
+ if (context->skipValidation() || ValidateSamplerParameteriv(context, sampler, pname, param))
+ {
+ context->samplerParameteriv(sampler, pname, param);
+ }
+ }
+}
+
+void GL_APIENTRY SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
+{
+ EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, GLfloat param = %f)", sampler, pname, param);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::SamplerParameterf>(sampler, pname, param);
+
+ if (context->skipValidation() || ValidateSamplerParameterf(context, sampler, pname, param))
+ {
+ context->samplerParameterf(sampler, pname, param);
+ }
+ }
+}
+
+void GL_APIENTRY SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat *param)
+{
+ EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, const GLfloat *param = 0x%0.8p)", sampler,
+ pname, param);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::SamplerParameterfv>(sampler, pname, param);
+
+ if (context->skipValidation() || ValidateSamplerParameterfv(context, sampler, pname, param))
+ {
+ context->samplerParameterfv(sampler, pname, param);
+ }
+ }
+}
+
+void GL_APIENTRY GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params)
+{
+ EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", sampler, pname,
+ params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetSamplerParameteriv>(sampler, pname, params);
+
+ if (context->skipValidation() ||
+ ValidateGetSamplerParameteriv(context, sampler, pname, params))
+ {
+ context->getSamplerParameteriv(sampler, pname, params);
+ }
+ }
+}
+
+void GL_APIENTRY GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat *params)
+{
+ EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, GLfloat *params = 0x%0.8p)", sampler, pname,
+ params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetSamplerParameterfv>(sampler, pname, params);
+
+ if (context->skipValidation() ||
+ ValidateGetSamplerParameterfv(context, sampler, pname, params))
+ {
+ context->getSamplerParameterfv(sampler, pname, params);
+ }
+ }
+}
+
+void GL_APIENTRY VertexAttribDivisor(GLuint index, GLuint divisor)
+{
+ EVENT("(GLuint index = %u, GLuint divisor = %u)", index, divisor);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::VertexAttribDivisor>(index, divisor);
+
+ if (context->skipValidation() || ValidateVertexAttribDivisor(context, index, divisor))
+ {
+ context->vertexAttribDivisor(index, divisor);
+ }
+ }
+}
+
+void GL_APIENTRY BindTransformFeedback(GLenum target, GLuint id)
+{
+ EVENT("(GLenum target = 0x%X, GLuint id = %u)", target, id);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::BindTransformFeedback>(target, id);
+
+ if (context->skipValidation() || ValidateBindTransformFeedback(context, target, id))
+ {
+ context->bindTransformFeedback(target, id);
+ }
+ }
+}
+
+void GL_APIENTRY DeleteTransformFeedbacks(GLsizei n, const GLuint *ids)
+{
+ EVENT("(GLsizei n = %d, const GLuint *ids = 0x%0.8p)", n, ids);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::DeleteTransformFeedbacks>(n, ids);
+
+ if (context->skipValidation() || ValidateDeleteTransformFeedbacks(context, n, ids))
+ {
+ context->deleteTransformFeedbacks(n, ids);
+ }
+ }
+}
+
+void GL_APIENTRY GenTransformFeedbacks(GLsizei n, GLuint *ids)
+{
+ EVENT("(GLsizei n = %d, GLuint *ids = 0x%0.8p)", n, ids);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GenTransformFeedbacks>(n, ids);
+
+ if (context->skipValidation() || ValidateGenTransformFeedbacks(context, n, ids))
+ {
+ context->genTransformFeedbacks(n, ids);
+ }
+ }
+}
+
+GLboolean GL_APIENTRY IsTransformFeedback(GLuint id)
+{
+ EVENT("(GLuint id = %u)", id);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::IsTransformFeedback>(id);
+
+ if (context->skipValidation() || ValidateIsTransformFeedback(context, id))
+ {
+ return context->isTransformFeedback(id);
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::IsTransformFeedback, GLboolean>();
+}
+
+void GL_APIENTRY PauseTransformFeedback()
+{
+ EVENT("()");
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::PauseTransformFeedback>();
+
+ if (context->skipValidation() || ValidatePauseTransformFeedback(context))
+ {
+ context->pauseTransformFeedback();
+ }
+ }
+}
+
+void GL_APIENTRY ResumeTransformFeedback()
+{
+ EVENT("()");
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ResumeTransformFeedback>();
+
+ if (context->skipValidation() || ValidateResumeTransformFeedback(context))
+ {
+ context->resumeTransformFeedback();
+ }
+ }
+}
+
+void GL_APIENTRY GetProgramBinary(GLuint program,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLenum *binaryFormat,
+ void *binary)
+{
+ EVENT(
+ "(GLuint program = %u, GLsizei bufSize = %d, GLsizei *length = 0x%0.8p, GLenum "
+ "*binaryFormat = 0x%0.8p, void *binary = 0x%0.8p)",
+ program, bufSize, length, binaryFormat, binary);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetProgramBinary>(program, bufSize, length, binaryFormat,
+ binary);
+
+ if (context->skipValidation() ||
+ ValidateGetProgramBinary(context, program, bufSize, length, binaryFormat, binary))
+ {
+ context->getProgramBinary(program, bufSize, length, binaryFormat, binary);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramBinary(GLuint program,
+ GLenum binaryFormat,
+ const void *binary,
+ GLsizei length)
+{
+ EVENT(
+ "(GLuint program = %u, GLenum binaryFormat = 0x%X, const void *binary = 0x%0.8p, GLsizei "
+ "length = %d)",
+ program, binaryFormat, binary, length);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramBinary>(program, binaryFormat, binary, length);
+
+ if (context->skipValidation() ||
+ ValidateProgramBinary(context, program, binaryFormat, binary, length))
+ {
+ context->programBinary(program, binaryFormat, binary, length);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramParameteri(GLuint program, GLenum pname, GLint value)
+{
+ EVENT("(GLuint program = %u, GLenum pname = 0x%X, GLint value = %d)", program, pname, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramParameteri>(program, pname, value);
+
+ if (context->skipValidation() || ValidateProgramParameteri(context, program, pname, value))
+ {
+ context->programParameteri(program, pname, value);
+ }
+ }
+}
+
+void GL_APIENTRY InvalidateFramebuffer(GLenum target,
+ GLsizei numAttachments,
+ const GLenum *attachments)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLsizei numAttachments = %d, const GLenum *attachments = 0x%0.8p)",
+ target, numAttachments, attachments);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::InvalidateFramebuffer>(target, numAttachments,
+ attachments);
+
+ if (context->skipValidation() ||
+ ValidateInvalidateFramebuffer(context, target, numAttachments, attachments))
+ {
+ context->invalidateFramebuffer(target, numAttachments, attachments);
+ }
+ }
+}
+
+void GL_APIENTRY InvalidateSubFramebuffer(GLenum target,
+ GLsizei numAttachments,
+ const GLenum *attachments,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLsizei numAttachments = %d, const GLenum *attachments = 0x%0.8p, "
+ "GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)",
+ target, numAttachments, attachments, x, y, width, height);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::InvalidateSubFramebuffer>(
+ target, numAttachments, attachments, x, y, width, height);
+
+ if (context->skipValidation() ||
+ ValidateInvalidateSubFramebuffer(context, target, numAttachments, attachments, x, y,
+ width, height))
+ {
+ context->invalidateSubFramebuffer(target, numAttachments, attachments, x, y, width,
+ height);
+ }
+ }
+}
+
+void GL_APIENTRY
+TexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLsizei levels = %d, GLenum internalformat = 0x%X, GLsizei width = "
+ "%d, GLsizei height = %d)",
+ target, levels, internalformat, width, height);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::TexStorage2D>(target, levels, internalformat, width,
+ height);
+
+ if (context->skipValidation() ||
+ ValidateTexStorage2D(context, target, levels, internalformat, width, height))
+ {
+ context->texStorage2D(target, levels, internalformat, width, height);
+ }
+ }
+}
+
+void GL_APIENTRY TexStorage3D(GLenum target,
+ GLsizei levels,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLsizei levels = %d, GLenum internalformat = 0x%X, GLsizei width = "
+ "%d, GLsizei height = %d, GLsizei depth = %d)",
+ target, levels, internalformat, width, height, depth);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::TexStorage3D>(target, levels, internalformat, width,
+ height, depth);
+
+ if (context->skipValidation() ||
+ ValidateTexStorage3D(context, target, levels, internalformat, width, height, depth))
+ {
+ context->texStorage3D(target, levels, internalformat, width, height, depth);
+ }
+ }
+}
+
+void GL_APIENTRY GetInternalformativ(GLenum target,
+ GLenum internalformat,
+ GLenum pname,
+ GLsizei bufSize,
+ GLint *params)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLenum internalformat = 0x%X, GLenum pname = 0x%X, GLsizei bufSize "
+ "= %d, GLint *params = 0x%0.8p)",
+ target, internalformat, pname, bufSize, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetInternalformativ>(target, internalformat, pname,
+ bufSize, params);
+
+ if (context->skipValidation() ||
+ ValidateGetInternalformativ(context, target, internalformat, pname, bufSize, params))
+ {
+ context->getInternalformativ(target, internalformat, pname, bufSize, params);
+ }
+ }
+}
+} // namespace gl
diff --git a/src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_0_autogen.h b/src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_0_autogen.h
new file mode 100644
index 0000000000..e93dde96ed
--- /dev/null
+++ b/src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_0_autogen.h
@@ -0,0 +1,284 @@
+// GENERATED FILE - DO NOT EDIT.
+// Generated by generate_entry_points.py using data from gl.xml.
+//
+// Copyright 2017 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.
+//
+// entry_points_gles_3_0_autogen.h:
+// Defines the GLES 3.0 entry points.
+
+#ifndef LIBGLESV2_ENTRYPOINTSGLES30_AUTOGEN_H_
+#define LIBGLESV2_ENTRYPOINTSGLES30_AUTOGEN_H_
+
+#include <GLES3/gl3.h>
+#include <export.h>
+
+namespace gl
+{
+ANGLE_EXPORT void GL_APIENTRY ReadBuffer(GLenum src);
+ANGLE_EXPORT void GL_APIENTRY DrawRangeElements(GLenum mode,
+ GLuint start,
+ GLuint end,
+ GLsizei count,
+ GLenum type,
+ const void *indices);
+ANGLE_EXPORT void GL_APIENTRY TexImage3D(GLenum target,
+ GLint level,
+ GLint internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth,
+ GLint border,
+ GLenum format,
+ GLenum type,
+ const void *pixels);
+ANGLE_EXPORT void GL_APIENTRY TexSubImage3D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLint zoffset,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth,
+ GLenum format,
+ GLenum type,
+ const void *pixels);
+ANGLE_EXPORT void GL_APIENTRY CopyTexSubImage3D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLint zoffset,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height);
+ANGLE_EXPORT void GL_APIENTRY CompressedTexImage3D(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth,
+ GLint border,
+ GLsizei imageSize,
+ const void *data);
+ANGLE_EXPORT void GL_APIENTRY CompressedTexSubImage3D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLint zoffset,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth,
+ GLenum format,
+ GLsizei imageSize,
+ const void *data);
+ANGLE_EXPORT void GL_APIENTRY GenQueries(GLsizei n, GLuint *ids);
+ANGLE_EXPORT void GL_APIENTRY DeleteQueries(GLsizei n, const GLuint *ids);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsQuery(GLuint id);
+ANGLE_EXPORT void GL_APIENTRY BeginQuery(GLenum target, GLuint id);
+ANGLE_EXPORT void GL_APIENTRY EndQuery(GLenum target);
+ANGLE_EXPORT void GL_APIENTRY GetQueryiv(GLenum target, GLenum pname, GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params);
+ANGLE_EXPORT GLboolean GL_APIENTRY UnmapBuffer(GLenum target);
+ANGLE_EXPORT void GL_APIENTRY GetBufferPointerv(GLenum target, GLenum pname, void **params);
+ANGLE_EXPORT void GL_APIENTRY DrawBuffers(GLsizei n, const GLenum *bufs);
+ANGLE_EXPORT void GL_APIENTRY UniformMatrix2x3fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY UniformMatrix3x2fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY UniformMatrix2x4fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY UniformMatrix4x2fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY UniformMatrix3x4fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY UniformMatrix4x3fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY BlitFramebuffer(GLint srcX0,
+ GLint srcY0,
+ GLint srcX1,
+ GLint srcY1,
+ GLint dstX0,
+ GLint dstY0,
+ GLint dstX1,
+ GLint dstY1,
+ GLbitfield mask,
+ GLenum filter);
+ANGLE_EXPORT void GL_APIENTRY RenderbufferStorageMultisample(GLenum target,
+ GLsizei samples,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height);
+ANGLE_EXPORT void GL_APIENTRY
+FramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+ANGLE_EXPORT void *GL_APIENTRY MapBufferRange(GLenum target,
+ GLintptr offset,
+ GLsizeiptr length,
+ GLbitfield access);
+ANGLE_EXPORT void GL_APIENTRY FlushMappedBufferRange(GLenum target,
+ GLintptr offset,
+ GLsizeiptr length);
+ANGLE_EXPORT void GL_APIENTRY BindVertexArray(GLuint array);
+ANGLE_EXPORT void GL_APIENTRY DeleteVertexArrays(GLsizei n, const GLuint *arrays);
+ANGLE_EXPORT void GL_APIENTRY GenVertexArrays(GLsizei n, GLuint *arrays);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsVertexArray(GLuint array);
+ANGLE_EXPORT void GL_APIENTRY GetIntegeri_v(GLenum target, GLuint index, GLint *data);
+ANGLE_EXPORT void GL_APIENTRY BeginTransformFeedback(GLenum primitiveMode);
+ANGLE_EXPORT void GL_APIENTRY EndTransformFeedback();
+ANGLE_EXPORT void GL_APIENTRY
+BindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+ANGLE_EXPORT void GL_APIENTRY BindBufferBase(GLenum target, GLuint index, GLuint buffer);
+ANGLE_EXPORT void GL_APIENTRY TransformFeedbackVaryings(GLuint program,
+ GLsizei count,
+ const GLchar *const *varyings,
+ GLenum bufferMode);
+ANGLE_EXPORT void GL_APIENTRY GetTransformFeedbackVarying(GLuint program,
+ GLuint index,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLsizei *size,
+ GLenum *type,
+ GLchar *name);
+ANGLE_EXPORT void GL_APIENTRY
+VertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribIiv(GLuint index, GLenum pname, GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint *params);
+ANGLE_EXPORT void GL_APIENTRY VertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w);
+ANGLE_EXPORT void GL_APIENTRY
+VertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+ANGLE_EXPORT void GL_APIENTRY VertexAttribI4iv(GLuint index, const GLint *v);
+ANGLE_EXPORT void GL_APIENTRY VertexAttribI4uiv(GLuint index, const GLuint *v);
+ANGLE_EXPORT void GL_APIENTRY GetUniformuiv(GLuint program, GLint location, GLuint *params);
+ANGLE_EXPORT GLint GL_APIENTRY GetFragDataLocation(GLuint program, const GLchar *name);
+ANGLE_EXPORT void GL_APIENTRY Uniform1ui(GLint location, GLuint v0);
+ANGLE_EXPORT void GL_APIENTRY Uniform2ui(GLint location, GLuint v0, GLuint v1);
+ANGLE_EXPORT void GL_APIENTRY Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2);
+ANGLE_EXPORT void GL_APIENTRY
+Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+ANGLE_EXPORT void GL_APIENTRY Uniform1uiv(GLint location, GLsizei count, const GLuint *value);
+ANGLE_EXPORT void GL_APIENTRY Uniform2uiv(GLint location, GLsizei count, const GLuint *value);
+ANGLE_EXPORT void GL_APIENTRY Uniform3uiv(GLint location, GLsizei count, const GLuint *value);
+ANGLE_EXPORT void GL_APIENTRY Uniform4uiv(GLint location, GLsizei count, const GLuint *value);
+ANGLE_EXPORT void GL_APIENTRY ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value);
+ANGLE_EXPORT void GL_APIENTRY ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value);
+ANGLE_EXPORT void GL_APIENTRY ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY ClearBufferfi(GLenum buffer,
+ GLint drawbuffer,
+ GLfloat depth,
+ GLint stencil);
+ANGLE_EXPORT const GLubyte *GL_APIENTRY GetStringi(GLenum name, GLuint index);
+ANGLE_EXPORT void GL_APIENTRY CopyBufferSubData(GLenum readTarget,
+ GLenum writeTarget,
+ GLintptr readOffset,
+ GLintptr writeOffset,
+ GLsizeiptr size);
+ANGLE_EXPORT void GL_APIENTRY GetUniformIndices(GLuint program,
+ GLsizei uniformCount,
+ const GLchar *const *uniformNames,
+ GLuint *uniformIndices);
+ANGLE_EXPORT void GL_APIENTRY GetActiveUniformsiv(GLuint program,
+ GLsizei uniformCount,
+ const GLuint *uniformIndices,
+ GLenum pname,
+ GLint *params);
+ANGLE_EXPORT GLuint GL_APIENTRY GetUniformBlockIndex(GLuint program,
+ const GLchar *uniformBlockName);
+ANGLE_EXPORT void GL_APIENTRY GetActiveUniformBlockiv(GLuint program,
+ GLuint uniformBlockIndex,
+ GLenum pname,
+ GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetActiveUniformBlockName(GLuint program,
+ GLuint uniformBlockIndex,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLchar *uniformBlockName);
+ANGLE_EXPORT void GL_APIENTRY UniformBlockBinding(GLuint program,
+ GLuint uniformBlockIndex,
+ GLuint uniformBlockBinding);
+ANGLE_EXPORT void GL_APIENTRY DrawArraysInstanced(GLenum mode,
+ GLint first,
+ GLsizei count,
+ GLsizei instancecount);
+ANGLE_EXPORT void GL_APIENTRY DrawElementsInstanced(GLenum mode,
+ GLsizei count,
+ GLenum type,
+ const void *indices,
+ GLsizei instancecount);
+ANGLE_EXPORT GLsync GL_APIENTRY FenceSync(GLenum condition, GLbitfield flags);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsSync(GLsync sync);
+ANGLE_EXPORT void GL_APIENTRY DeleteSync(GLsync sync);
+ANGLE_EXPORT GLenum GL_APIENTRY ClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout);
+ANGLE_EXPORT void GL_APIENTRY WaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout);
+ANGLE_EXPORT void GL_APIENTRY GetInteger64v(GLenum pname, GLint64 *data);
+ANGLE_EXPORT void GL_APIENTRY
+GetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+ANGLE_EXPORT void GL_APIENTRY GetInteger64i_v(GLenum target, GLuint index, GLint64 *data);
+ANGLE_EXPORT void GL_APIENTRY GetBufferParameteri64v(GLenum target, GLenum pname, GLint64 *params);
+ANGLE_EXPORT void GL_APIENTRY GenSamplers(GLsizei count, GLuint *samplers);
+ANGLE_EXPORT void GL_APIENTRY DeleteSamplers(GLsizei count, const GLuint *samplers);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsSampler(GLuint sampler);
+ANGLE_EXPORT void GL_APIENTRY BindSampler(GLuint unit, GLuint sampler);
+ANGLE_EXPORT void GL_APIENTRY SamplerParameteri(GLuint sampler, GLenum pname, GLint param);
+ANGLE_EXPORT void GL_APIENTRY SamplerParameteriv(GLuint sampler, GLenum pname, const GLint *param);
+ANGLE_EXPORT void GL_APIENTRY SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param);
+ANGLE_EXPORT void GL_APIENTRY SamplerParameterfv(GLuint sampler,
+ GLenum pname,
+ const GLfloat *param);
+ANGLE_EXPORT void GL_APIENTRY GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY VertexAttribDivisor(GLuint index, GLuint divisor);
+ANGLE_EXPORT void GL_APIENTRY BindTransformFeedback(GLenum target, GLuint id);
+ANGLE_EXPORT void GL_APIENTRY DeleteTransformFeedbacks(GLsizei n, const GLuint *ids);
+ANGLE_EXPORT void GL_APIENTRY GenTransformFeedbacks(GLsizei n, GLuint *ids);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsTransformFeedback(GLuint id);
+ANGLE_EXPORT void GL_APIENTRY PauseTransformFeedback();
+ANGLE_EXPORT void GL_APIENTRY ResumeTransformFeedback();
+ANGLE_EXPORT void GL_APIENTRY GetProgramBinary(GLuint program,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLenum *binaryFormat,
+ void *binary);
+ANGLE_EXPORT void GL_APIENTRY ProgramBinary(GLuint program,
+ GLenum binaryFormat,
+ const void *binary,
+ GLsizei length);
+ANGLE_EXPORT void GL_APIENTRY ProgramParameteri(GLuint program, GLenum pname, GLint value);
+ANGLE_EXPORT void GL_APIENTRY InvalidateFramebuffer(GLenum target,
+ GLsizei numAttachments,
+ const GLenum *attachments);
+ANGLE_EXPORT void GL_APIENTRY InvalidateSubFramebuffer(GLenum target,
+ GLsizei numAttachments,
+ const GLenum *attachments,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height);
+ANGLE_EXPORT void GL_APIENTRY
+TexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+ANGLE_EXPORT void GL_APIENTRY TexStorage3D(GLenum target,
+ GLsizei levels,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth);
+ANGLE_EXPORT void GL_APIENTRY GetInternalformativ(GLenum target,
+ GLenum internalformat,
+ GLenum pname,
+ GLsizei bufSize,
+ GLint *params);
+} // namespace gl
+
+#endif // LIBGLESV2_ENTRYPOINTSGLES30_AUTOGEN_H_
diff --git a/src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_0_ext.cpp b/src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_0_ext.cpp
deleted file mode 100644
index 6f6983fd91..0000000000
--- a/src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_0_ext.cpp
+++ /dev/null
@@ -1,14 +0,0 @@
-//
-// Copyright(c) 2014 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.
-//
-
-// entry_points_gles_3_0_ext.cpp : Implements the GLES 3.0 extension entry points.
-
-#include "libGLESv2/entry_points_gles_3_0_ext.h"
-#include "libGLESv2/global_state.h"
-
-namespace gl
-{
-}
diff --git a/src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_0_ext.h b/src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_0_ext.h
deleted file mode 100644
index fec4c1298a..0000000000
--- a/src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_0_ext.h
+++ /dev/null
@@ -1,23 +0,0 @@
-//
-// Copyright(c) 2014 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.
-//
-
-// entry_points_gles_3_0_ext.h : Defines the GLES 3.0 extension entry points.
-
-#ifndef LIBGLESV2_ENTRYPOINTGLES30EXT_H_
-#define LIBGLESV2_ENTRYPOINTGLES30EXT_H_
-
-#include <GLES3/gl3.h>
-#include <GLES3/gl3ext.h>
-#include <export.h>
-
-namespace gl
-{
-
-// No GLES 3.0 extensions yet
-
-}
-
-#endif // LIBGLESV2_ENTRYPOINTGLES30EXT_H_
diff --git a/src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_1_autogen.cpp b/src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_1_autogen.cpp
new file mode 100644
index 0000000000..5d836872d6
--- /dev/null
+++ b/src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_1_autogen.cpp
@@ -0,0 +1,1430 @@
+// GENERATED FILE - DO NOT EDIT.
+// Generated by generate_entry_points.py using data from gl.xml.
+//
+// Copyright 2017 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.
+//
+// entry_points_gles_3_1_autogen.cpp:
+// Defines the GLES 3.1 entry points.
+
+#include "libANGLE/Context.h"
+#include "libANGLE/validationES31.h"
+#include "libGLESv2/global_state.h"
+
+namespace gl
+{
+void GL_APIENTRY DispatchCompute(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z)
+{
+ EVENT("(GLuint num_groups_x = %u, GLuint num_groups_y = %u, GLuint num_groups_z = %u)",
+ num_groups_x, num_groups_y, num_groups_z);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::DispatchCompute>(num_groups_x, num_groups_y,
+ num_groups_z);
+
+ if (context->skipValidation() ||
+ ValidateDispatchCompute(context, num_groups_x, num_groups_y, num_groups_z))
+ {
+ context->dispatchCompute(num_groups_x, num_groups_y, num_groups_z);
+ }
+ }
+}
+
+void GL_APIENTRY DispatchComputeIndirect(GLintptr indirect)
+{
+ EVENT("(GLintptr indirect = %d)", indirect);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::DispatchComputeIndirect>(indirect);
+
+ if (context->skipValidation() || ValidateDispatchComputeIndirect(context, indirect))
+ {
+ context->dispatchComputeIndirect(indirect);
+ }
+ }
+}
+
+void GL_APIENTRY DrawArraysIndirect(GLenum mode, const void *indirect)
+{
+ EVENT("(GLenum mode = 0x%X, const void *indirect = 0x%0.8p)", mode, indirect);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::DrawArraysIndirect>(mode, indirect);
+
+ if (context->skipValidation() || ValidateDrawArraysIndirect(context, mode, indirect))
+ {
+ context->drawArraysIndirect(mode, indirect);
+ }
+ }
+}
+
+void GL_APIENTRY DrawElementsIndirect(GLenum mode, GLenum type, const void *indirect)
+{
+ EVENT("(GLenum mode = 0x%X, GLenum type = 0x%X, const void *indirect = 0x%0.8p)", mode, type,
+ indirect);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::DrawElementsIndirect>(mode, type, indirect);
+
+ if (context->skipValidation() ||
+ ValidateDrawElementsIndirect(context, mode, type, indirect))
+ {
+ context->drawElementsIndirect(mode, type, indirect);
+ }
+ }
+}
+
+void GL_APIENTRY FramebufferParameteri(GLenum target, GLenum pname, GLint param)
+{
+ EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint param = %d)", target, pname, param);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::FramebufferParameteri>(target, pname, param);
+
+ if (context->skipValidation() ||
+ ValidateFramebufferParameteri(context, target, pname, param))
+ {
+ context->framebufferParameteri(target, pname, param);
+ }
+ }
+}
+
+void GL_APIENTRY GetFramebufferParameteriv(GLenum target, GLenum pname, GLint *params)
+{
+ EVENT("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", target, pname,
+ params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetFramebufferParameteriv>(target, pname, params);
+
+ if (context->skipValidation() ||
+ ValidateGetFramebufferParameteriv(context, target, pname, params))
+ {
+ context->getFramebufferParameteriv(target, pname, params);
+ }
+ }
+}
+
+void GL_APIENTRY GetProgramInterfaceiv(GLuint program,
+ GLenum programInterface,
+ GLenum pname,
+ GLint *params)
+{
+ EVENT(
+ "(GLuint program = %u, GLenum programInterface = 0x%X, GLenum pname = 0x%X, GLint *params "
+ "= 0x%0.8p)",
+ program, programInterface, pname, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetProgramInterfaceiv>(program, programInterface, pname,
+ params);
+
+ if (context->skipValidation() ||
+ ValidateGetProgramInterfaceiv(context, program, programInterface, pname, params))
+ {
+ context->getProgramInterfaceiv(program, programInterface, pname, params);
+ }
+ }
+}
+
+GLuint GL_APIENTRY GetProgramResourceIndex(GLuint program,
+ GLenum programInterface,
+ const GLchar *name)
+{
+ EVENT("(GLuint program = %u, GLenum programInterface = 0x%X, const GLchar *name = 0x%0.8p)",
+ program, programInterface, name);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetProgramResourceIndex>(program, programInterface, name);
+
+ if (context->skipValidation() ||
+ ValidateGetProgramResourceIndex(context, program, programInterface, name))
+ {
+ return context->getProgramResourceIndex(program, programInterface, name);
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::GetProgramResourceIndex, GLuint>();
+}
+
+void GL_APIENTRY GetProgramResourceName(GLuint program,
+ GLenum programInterface,
+ GLuint index,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLchar *name)
+{
+ EVENT(
+ "(GLuint program = %u, GLenum programInterface = 0x%X, GLuint index = %u, GLsizei bufSize "
+ "= %d, GLsizei *length = 0x%0.8p, GLchar *name = 0x%0.8p)",
+ program, programInterface, index, bufSize, length, name);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetProgramResourceName>(program, programInterface, index,
+ bufSize, length, name);
+
+ if (context->skipValidation() ||
+ ValidateGetProgramResourceName(context, program, programInterface, index, bufSize,
+ length, name))
+ {
+ context->getProgramResourceName(program, programInterface, index, bufSize, length,
+ name);
+ }
+ }
+}
+
+void GL_APIENTRY GetProgramResourceiv(GLuint program,
+ GLenum programInterface,
+ GLuint index,
+ GLsizei propCount,
+ const GLenum *props,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params)
+{
+ EVENT(
+ "(GLuint program = %u, GLenum programInterface = 0x%X, GLuint index = %u, GLsizei "
+ "propCount = %d, const GLenum *props = 0x%0.8p, GLsizei bufSize = %d, GLsizei *length = "
+ "0x%0.8p, GLint *params = 0x%0.8p)",
+ program, programInterface, index, propCount, props, bufSize, length, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetProgramResourceiv>(
+ program, programInterface, index, propCount, props, bufSize, length, params);
+
+ if (context->skipValidation() ||
+ ValidateGetProgramResourceiv(context, program, programInterface, index, propCount,
+ props, bufSize, length, params))
+ {
+ context->getProgramResourceiv(program, programInterface, index, propCount, props,
+ bufSize, length, params);
+ }
+ }
+}
+
+GLint GL_APIENTRY GetProgramResourceLocation(GLuint program,
+ GLenum programInterface,
+ const GLchar *name)
+{
+ EVENT("(GLuint program = %u, GLenum programInterface = 0x%X, const GLchar *name = 0x%0.8p)",
+ program, programInterface, name);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetProgramResourceLocation>(program, programInterface,
+ name);
+
+ if (context->skipValidation() ||
+ ValidateGetProgramResourceLocation(context, program, programInterface, name))
+ {
+ return context->getProgramResourceLocation(program, programInterface, name);
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::GetProgramResourceLocation, GLint>();
+}
+
+void GL_APIENTRY UseProgramStages(GLuint pipeline, GLbitfield stages, GLuint program)
+{
+ EVENT("(GLuint pipeline = %u, GLbitfield stages = 0x%X, GLuint program = %u)", pipeline, stages,
+ program);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::UseProgramStages>(pipeline, stages, program);
+
+ if (context->skipValidation() ||
+ ValidateUseProgramStages(context, pipeline, stages, program))
+ {
+ context->useProgramStages(pipeline, stages, program);
+ }
+ }
+}
+
+void GL_APIENTRY ActiveShaderProgram(GLuint pipeline, GLuint program)
+{
+ EVENT("(GLuint pipeline = %u, GLuint program = %u)", pipeline, program);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ActiveShaderProgram>(pipeline, program);
+
+ if (context->skipValidation() || ValidateActiveShaderProgram(context, pipeline, program))
+ {
+ context->activeShaderProgram(pipeline, program);
+ }
+ }
+}
+
+GLuint GL_APIENTRY CreateShaderProgramv(GLenum type, GLsizei count, const GLchar *const *strings)
+{
+ EVENT("(GLenum type = 0x%X, GLsizei count = %d, const GLchar *const*strings = 0x%0.8p)", type,
+ count, strings);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::CreateShaderProgramv>(type, count, strings);
+
+ if (context->skipValidation() ||
+ ValidateCreateShaderProgramv(context, type, count, strings))
+ {
+ return context->createShaderProgramv(type, count, strings);
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::CreateShaderProgramv, GLuint>();
+}
+
+void GL_APIENTRY BindProgramPipeline(GLuint pipeline)
+{
+ EVENT("(GLuint pipeline = %u)", pipeline);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::BindProgramPipeline>(pipeline);
+
+ if (context->skipValidation() || ValidateBindProgramPipeline(context, pipeline))
+ {
+ context->bindProgramPipeline(pipeline);
+ }
+ }
+}
+
+void GL_APIENTRY DeleteProgramPipelines(GLsizei n, const GLuint *pipelines)
+{
+ EVENT("(GLsizei n = %d, const GLuint *pipelines = 0x%0.8p)", n, pipelines);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::DeleteProgramPipelines>(n, pipelines);
+
+ if (context->skipValidation() || ValidateDeleteProgramPipelines(context, n, pipelines))
+ {
+ context->deleteProgramPipelines(n, pipelines);
+ }
+ }
+}
+
+void GL_APIENTRY GenProgramPipelines(GLsizei n, GLuint *pipelines)
+{
+ EVENT("(GLsizei n = %d, GLuint *pipelines = 0x%0.8p)", n, pipelines);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GenProgramPipelines>(n, pipelines);
+
+ if (context->skipValidation() || ValidateGenProgramPipelines(context, n, pipelines))
+ {
+ context->genProgramPipelines(n, pipelines);
+ }
+ }
+}
+
+GLboolean GL_APIENTRY IsProgramPipeline(GLuint pipeline)
+{
+ EVENT("(GLuint pipeline = %u)", pipeline);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::IsProgramPipeline>(pipeline);
+
+ if (context->skipValidation() || ValidateIsProgramPipeline(context, pipeline))
+ {
+ return context->isProgramPipeline(pipeline);
+ }
+ }
+
+ return GetDefaultReturnValue<EntryPoint::IsProgramPipeline, GLboolean>();
+}
+
+void GL_APIENTRY GetProgramPipelineiv(GLuint pipeline, GLenum pname, GLint *params)
+{
+ EVENT("(GLuint pipeline = %u, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", pipeline, pname,
+ params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetProgramPipelineiv>(pipeline, pname, params);
+
+ if (context->skipValidation() ||
+ ValidateGetProgramPipelineiv(context, pipeline, pname, params))
+ {
+ context->getProgramPipelineiv(pipeline, pname, params);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniform1i(GLuint program, GLint location, GLint v0)
+{
+ EVENT("(GLuint program = %u, GLint location = %d, GLint v0 = %d)", program, location, v0);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniform1i>(program, location, v0);
+
+ if (context->skipValidation() || ValidateProgramUniform1i(context, program, location, v0))
+ {
+ context->programUniform1i(program, location, v0);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniform2i(GLuint program, GLint location, GLint v0, GLint v1)
+{
+ EVENT("(GLuint program = %u, GLint location = %d, GLint v0 = %d, GLint v1 = %d)", program,
+ location, v0, v1);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniform2i>(program, location, v0, v1);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniform2i(context, program, location, v0, v1))
+ {
+ context->programUniform2i(program, location, v0, v1);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniform3i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2)
+{
+ EVENT("(GLuint program = %u, GLint location = %d, GLint v0 = %d, GLint v1 = %d, GLint v2 = %d)",
+ program, location, v0, v1, v2);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniform3i>(program, location, v0, v1, v2);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniform3i(context, program, location, v0, v1, v2))
+ {
+ context->programUniform3i(program, location, v0, v1, v2);
+ }
+ }
+}
+
+void GL_APIENTRY
+ProgramUniform4i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location = %d, GLint v0 = %d, GLint v1 = %d, GLint v2 = %d, "
+ "GLint v3 = %d)",
+ program, location, v0, v1, v2, v3);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniform4i>(program, location, v0, v1, v2, v3);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniform4i(context, program, location, v0, v1, v2, v3))
+ {
+ context->programUniform4i(program, location, v0, v1, v2, v3);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniform1ui(GLuint program, GLint location, GLuint v0)
+{
+ EVENT("(GLuint program = %u, GLint location = %d, GLuint v0 = %u)", program, location, v0);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniform1ui>(program, location, v0);
+
+ if (context->skipValidation() || ValidateProgramUniform1ui(context, program, location, v0))
+ {
+ context->programUniform1ui(program, location, v0);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniform2ui(GLuint program, GLint location, GLuint v0, GLuint v1)
+{
+ EVENT("(GLuint program = %u, GLint location = %d, GLuint v0 = %u, GLuint v1 = %u)", program,
+ location, v0, v1);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniform2ui>(program, location, v0, v1);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniform2ui(context, program, location, v0, v1))
+ {
+ context->programUniform2ui(program, location, v0, v1);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniform3ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location = %d, GLuint v0 = %u, GLuint v1 = %u, GLuint v2 = "
+ "%u)",
+ program, location, v0, v1, v2);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniform3ui>(program, location, v0, v1, v2);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniform3ui(context, program, location, v0, v1, v2))
+ {
+ context->programUniform3ui(program, location, v0, v1, v2);
+ }
+ }
+}
+
+void GL_APIENTRY
+ProgramUniform4ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location = %d, GLuint v0 = %u, GLuint v1 = %u, GLuint v2 = "
+ "%u, GLuint v3 = %u)",
+ program, location, v0, v1, v2, v3);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniform4ui>(program, location, v0, v1, v2, v3);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniform4ui(context, program, location, v0, v1, v2, v3))
+ {
+ context->programUniform4ui(program, location, v0, v1, v2, v3);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniform1f(GLuint program, GLint location, GLfloat v0)
+{
+ EVENT("(GLuint program = %u, GLint location = %d, GLfloat v0 = %f)", program, location, v0);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniform1f>(program, location, v0);
+
+ if (context->skipValidation() || ValidateProgramUniform1f(context, program, location, v0))
+ {
+ context->programUniform1f(program, location, v0);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniform2f(GLuint program, GLint location, GLfloat v0, GLfloat v1)
+{
+ EVENT("(GLuint program = %u, GLint location = %d, GLfloat v0 = %f, GLfloat v1 = %f)", program,
+ location, v0, v1);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniform2f>(program, location, v0, v1);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniform2f(context, program, location, v0, v1))
+ {
+ context->programUniform2f(program, location, v0, v1);
+ }
+ }
+}
+
+void GL_APIENTRY
+ProgramUniform3f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location = %d, GLfloat v0 = %f, GLfloat v1 = %f, GLfloat v2 = "
+ "%f)",
+ program, location, v0, v1, v2);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniform3f>(program, location, v0, v1, v2);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniform3f(context, program, location, v0, v1, v2))
+ {
+ context->programUniform3f(program, location, v0, v1, v2);
+ }
+ }
+}
+
+void GL_APIENTRY
+ProgramUniform4f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location = %d, GLfloat v0 = %f, GLfloat v1 = %f, GLfloat v2 = "
+ "%f, GLfloat v3 = %f)",
+ program, location, v0, v1, v2, v3);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniform4f>(program, location, v0, v1, v2, v3);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniform4f(context, program, location, v0, v1, v2, v3))
+ {
+ context->programUniform4f(program, location, v0, v1, v2, v3);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniform1iv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLint *value)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location = %d, GLsizei count = %d, const GLint *value = "
+ "0x%0.8p)",
+ program, location, count, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniform1iv>(program, location, count, value);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniform1iv(context, program, location, count, value))
+ {
+ context->programUniform1iv(program, location, count, value);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniform2iv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLint *value)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location = %d, GLsizei count = %d, const GLint *value = "
+ "0x%0.8p)",
+ program, location, count, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniform2iv>(program, location, count, value);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniform2iv(context, program, location, count, value))
+ {
+ context->programUniform2iv(program, location, count, value);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniform3iv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLint *value)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location = %d, GLsizei count = %d, const GLint *value = "
+ "0x%0.8p)",
+ program, location, count, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniform3iv>(program, location, count, value);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniform3iv(context, program, location, count, value))
+ {
+ context->programUniform3iv(program, location, count, value);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniform4iv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLint *value)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location = %d, GLsizei count = %d, const GLint *value = "
+ "0x%0.8p)",
+ program, location, count, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniform4iv>(program, location, count, value);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniform4iv(context, program, location, count, value))
+ {
+ context->programUniform4iv(program, location, count, value);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniform1uiv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLuint *value)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location = %d, GLsizei count = %d, const GLuint *value = "
+ "0x%0.8p)",
+ program, location, count, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniform1uiv>(program, location, count, value);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniform1uiv(context, program, location, count, value))
+ {
+ context->programUniform1uiv(program, location, count, value);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniform2uiv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLuint *value)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location = %d, GLsizei count = %d, const GLuint *value = "
+ "0x%0.8p)",
+ program, location, count, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniform2uiv>(program, location, count, value);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniform2uiv(context, program, location, count, value))
+ {
+ context->programUniform2uiv(program, location, count, value);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniform3uiv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLuint *value)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location = %d, GLsizei count = %d, const GLuint *value = "
+ "0x%0.8p)",
+ program, location, count, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniform3uiv>(program, location, count, value);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniform3uiv(context, program, location, count, value))
+ {
+ context->programUniform3uiv(program, location, count, value);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniform4uiv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLuint *value)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location = %d, GLsizei count = %d, const GLuint *value = "
+ "0x%0.8p)",
+ program, location, count, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniform4uiv>(program, location, count, value);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniform4uiv(context, program, location, count, value))
+ {
+ context->programUniform4uiv(program, location, count, value);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniform1fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLfloat *value)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location = %d, GLsizei count = %d, const GLfloat *value = "
+ "0x%0.8p)",
+ program, location, count, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniform1fv>(program, location, count, value);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniform1fv(context, program, location, count, value))
+ {
+ context->programUniform1fv(program, location, count, value);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniform2fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLfloat *value)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location = %d, GLsizei count = %d, const GLfloat *value = "
+ "0x%0.8p)",
+ program, location, count, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniform2fv>(program, location, count, value);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniform2fv(context, program, location, count, value))
+ {
+ context->programUniform2fv(program, location, count, value);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniform3fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLfloat *value)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location = %d, GLsizei count = %d, const GLfloat *value = "
+ "0x%0.8p)",
+ program, location, count, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniform3fv>(program, location, count, value);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniform3fv(context, program, location, count, value))
+ {
+ context->programUniform3fv(program, location, count, value);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniform4fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLfloat *value)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location = %d, GLsizei count = %d, const GLfloat *value = "
+ "0x%0.8p)",
+ program, location, count, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniform4fv>(program, location, count, value);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniform4fv(context, program, location, count, value))
+ {
+ context->programUniform4fv(program, location, count, value);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniformMatrix2fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, "
+ "const GLfloat *value = 0x%0.8p)",
+ program, location, count, transpose, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniformMatrix2fv>(program, location, count,
+ transpose, value);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniformMatrix2fv(context, program, location, count, transpose, value))
+ {
+ context->programUniformMatrix2fv(program, location, count, transpose, value);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniformMatrix3fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, "
+ "const GLfloat *value = 0x%0.8p)",
+ program, location, count, transpose, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniformMatrix3fv>(program, location, count,
+ transpose, value);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniformMatrix3fv(context, program, location, count, transpose, value))
+ {
+ context->programUniformMatrix3fv(program, location, count, transpose, value);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniformMatrix4fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, "
+ "const GLfloat *value = 0x%0.8p)",
+ program, location, count, transpose, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniformMatrix4fv>(program, location, count,
+ transpose, value);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniformMatrix4fv(context, program, location, count, transpose, value))
+ {
+ context->programUniformMatrix4fv(program, location, count, transpose, value);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniformMatrix2x3fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, "
+ "const GLfloat *value = 0x%0.8p)",
+ program, location, count, transpose, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniformMatrix2x3fv>(program, location, count,
+ transpose, value);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniformMatrix2x3fv(context, program, location, count, transpose, value))
+ {
+ context->programUniformMatrix2x3fv(program, location, count, transpose, value);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniformMatrix3x2fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, "
+ "const GLfloat *value = 0x%0.8p)",
+ program, location, count, transpose, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniformMatrix3x2fv>(program, location, count,
+ transpose, value);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniformMatrix3x2fv(context, program, location, count, transpose, value))
+ {
+ context->programUniformMatrix3x2fv(program, location, count, transpose, value);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniformMatrix2x4fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, "
+ "const GLfloat *value = 0x%0.8p)",
+ program, location, count, transpose, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniformMatrix2x4fv>(program, location, count,
+ transpose, value);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniformMatrix2x4fv(context, program, location, count, transpose, value))
+ {
+ context->programUniformMatrix2x4fv(program, location, count, transpose, value);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniformMatrix4x2fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, "
+ "const GLfloat *value = 0x%0.8p)",
+ program, location, count, transpose, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniformMatrix4x2fv>(program, location, count,
+ transpose, value);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniformMatrix4x2fv(context, program, location, count, transpose, value))
+ {
+ context->programUniformMatrix4x2fv(program, location, count, transpose, value);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniformMatrix3x4fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, "
+ "const GLfloat *value = 0x%0.8p)",
+ program, location, count, transpose, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniformMatrix3x4fv>(program, location, count,
+ transpose, value);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniformMatrix3x4fv(context, program, location, count, transpose, value))
+ {
+ context->programUniformMatrix3x4fv(program, location, count, transpose, value);
+ }
+ }
+}
+
+void GL_APIENTRY ProgramUniformMatrix4x3fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
+{
+ EVENT(
+ "(GLuint program = %u, GLint location = %d, GLsizei count = %d, GLboolean transpose = %u, "
+ "const GLfloat *value = 0x%0.8p)",
+ program, location, count, transpose, value);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ProgramUniformMatrix4x3fv>(program, location, count,
+ transpose, value);
+
+ if (context->skipValidation() ||
+ ValidateProgramUniformMatrix4x3fv(context, program, location, count, transpose, value))
+ {
+ context->programUniformMatrix4x3fv(program, location, count, transpose, value);
+ }
+ }
+}
+
+void GL_APIENTRY ValidateProgramPipeline(GLuint pipeline)
+{
+ EVENT("(GLuint pipeline = %u)", pipeline);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::ValidateProgramPipeline>(pipeline);
+
+ if (context->skipValidation() || ValidateValidateProgramPipeline(context, pipeline))
+ {
+ context->validateProgramPipeline(pipeline);
+ }
+ }
+}
+
+void GL_APIENTRY GetProgramPipelineInfoLog(GLuint pipeline,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLchar *infoLog)
+{
+ EVENT(
+ "(GLuint pipeline = %u, GLsizei bufSize = %d, GLsizei *length = 0x%0.8p, GLchar *infoLog = "
+ "0x%0.8p)",
+ pipeline, bufSize, length, infoLog);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetProgramPipelineInfoLog>(pipeline, bufSize, length,
+ infoLog);
+
+ if (context->skipValidation() ||
+ ValidateGetProgramPipelineInfoLog(context, pipeline, bufSize, length, infoLog))
+ {
+ context->getProgramPipelineInfoLog(pipeline, bufSize, length, infoLog);
+ }
+ }
+}
+
+void GL_APIENTRY BindImageTexture(GLuint unit,
+ GLuint texture,
+ GLint level,
+ GLboolean layered,
+ GLint layer,
+ GLenum access,
+ GLenum format)
+{
+ EVENT(
+ "(GLuint unit = %u, GLuint texture = %u, GLint level = %d, GLboolean layered = %u, GLint "
+ "layer = %d, GLenum access = 0x%X, GLenum format = 0x%X)",
+ unit, texture, level, layered, layer, access, format);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::BindImageTexture>(unit, texture, level, layered, layer,
+ access, format);
+
+ if (context->skipValidation() ||
+ ValidateBindImageTexture(context, unit, texture, level, layered, layer, access, format))
+ {
+ context->bindImageTexture(unit, texture, level, layered, layer, access, format);
+ }
+ }
+}
+
+void GL_APIENTRY GetBooleani_v(GLenum target, GLuint index, GLboolean *data)
+{
+ EVENT("(GLenum target = 0x%X, GLuint index = %u, GLboolean *data = 0x%0.8p)", target, index,
+ data);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetBooleani_v>(target, index, data);
+
+ if (context->skipValidation() || ValidateGetBooleani_v(context, target, index, data))
+ {
+ context->getBooleani_v(target, index, data);
+ }
+ }
+}
+
+void GL_APIENTRY MemoryBarrier(GLbitfield barriers)
+{
+ EVENT("(GLbitfield barriers = 0x%X)", barriers);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::MemoryBarrier>(barriers);
+
+ if (context->skipValidation() || ValidateMemoryBarrier(context, barriers))
+ {
+ context->memoryBarrier(barriers);
+ }
+ }
+}
+
+void GL_APIENTRY MemoryBarrierByRegion(GLbitfield barriers)
+{
+ EVENT("(GLbitfield barriers = 0x%X)", barriers);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::MemoryBarrierByRegion>(barriers);
+
+ if (context->skipValidation() || ValidateMemoryBarrierByRegion(context, barriers))
+ {
+ context->memoryBarrierByRegion(barriers);
+ }
+ }
+}
+
+void GL_APIENTRY TexStorage2DMultisample(GLenum target,
+ GLsizei samples,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLboolean fixedsamplelocations)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLsizei samples = %d, GLenum internalformat = 0x%X, GLsizei width "
+ "= %d, GLsizei height = %d, GLboolean fixedsamplelocations = %u)",
+ target, samples, internalformat, width, height, fixedsamplelocations);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::TexStorage2DMultisample>(
+ target, samples, internalformat, width, height, fixedsamplelocations);
+
+ if (context->skipValidation() ||
+ ValidateTexStorage2DMultisample(context, target, samples, internalformat, width, height,
+ fixedsamplelocations))
+ {
+ context->texStorage2DMultisample(target, samples, internalformat, width, height,
+ fixedsamplelocations);
+ }
+ }
+}
+
+void GL_APIENTRY GetMultisamplefv(GLenum pname, GLuint index, GLfloat *val)
+{
+ EVENT("(GLenum pname = 0x%X, GLuint index = %u, GLfloat *val = 0x%0.8p)", pname, index, val);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetMultisamplefv>(pname, index, val);
+
+ if (context->skipValidation() || ValidateGetMultisamplefv(context, pname, index, val))
+ {
+ context->getMultisamplefv(pname, index, val);
+ }
+ }
+}
+
+void GL_APIENTRY SampleMaski(GLuint maskNumber, GLbitfield mask)
+{
+ EVENT("(GLuint maskNumber = %u, GLbitfield mask = 0x%X)", maskNumber, mask);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::SampleMaski>(maskNumber, mask);
+
+ if (context->skipValidation() || ValidateSampleMaski(context, maskNumber, mask))
+ {
+ context->sampleMaski(maskNumber, mask);
+ }
+ }
+}
+
+void GL_APIENTRY GetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params)
+{
+ EVENT("(GLenum target = 0x%X, GLint level = %d, GLenum pname = 0x%X, GLint *params = 0x%0.8p)",
+ target, level, pname, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetTexLevelParameteriv>(target, level, pname, params);
+
+ if (context->skipValidation() ||
+ ValidateGetTexLevelParameteriv(context, target, level, pname, params))
+ {
+ context->getTexLevelParameteriv(target, level, pname, params);
+ }
+ }
+}
+
+void GL_APIENTRY GetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params)
+{
+ EVENT(
+ "(GLenum target = 0x%X, GLint level = %d, GLenum pname = 0x%X, GLfloat *params = 0x%0.8p)",
+ target, level, pname, params);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::GetTexLevelParameterfv>(target, level, pname, params);
+
+ if (context->skipValidation() ||
+ ValidateGetTexLevelParameterfv(context, target, level, pname, params))
+ {
+ context->getTexLevelParameterfv(target, level, pname, params);
+ }
+ }
+}
+
+void GL_APIENTRY BindVertexBuffer(GLuint bindingindex,
+ GLuint buffer,
+ GLintptr offset,
+ GLsizei stride)
+{
+ EVENT(
+ "(GLuint bindingindex = %u, GLuint buffer = %u, GLintptr offset = %d, GLsizei stride = %d)",
+ bindingindex, buffer, offset, stride);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::BindVertexBuffer>(bindingindex, buffer, offset, stride);
+
+ if (context->skipValidation() ||
+ ValidateBindVertexBuffer(context, bindingindex, buffer, offset, stride))
+ {
+ context->bindVertexBuffer(bindingindex, buffer, offset, stride);
+ }
+ }
+}
+
+void GL_APIENTRY VertexAttribFormat(GLuint attribindex,
+ GLint size,
+ GLenum type,
+ GLboolean normalized,
+ GLuint relativeoffset)
+{
+ EVENT(
+ "(GLuint attribindex = %u, GLint size = %d, GLenum type = 0x%X, GLboolean normalized = %u, "
+ "GLuint relativeoffset = %u)",
+ attribindex, size, type, normalized, relativeoffset);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::VertexAttribFormat>(attribindex, size, type, normalized,
+ relativeoffset);
+
+ if (context->skipValidation() ||
+ ValidateVertexAttribFormat(context, attribindex, size, type, normalized,
+ relativeoffset))
+ {
+ context->vertexAttribFormat(attribindex, size, type, normalized, relativeoffset);
+ }
+ }
+}
+
+void GL_APIENTRY VertexAttribIFormat(GLuint attribindex,
+ GLint size,
+ GLenum type,
+ GLuint relativeoffset)
+{
+ EVENT(
+ "(GLuint attribindex = %u, GLint size = %d, GLenum type = 0x%X, GLuint relativeoffset = "
+ "%u)",
+ attribindex, size, type, relativeoffset);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::VertexAttribIFormat>(attribindex, size, type,
+ relativeoffset);
+
+ if (context->skipValidation() ||
+ ValidateVertexAttribIFormat(context, attribindex, size, type, relativeoffset))
+ {
+ context->vertexAttribIFormat(attribindex, size, type, relativeoffset);
+ }
+ }
+}
+
+void GL_APIENTRY VertexAttribBinding(GLuint attribindex, GLuint bindingindex)
+{
+ EVENT("(GLuint attribindex = %u, GLuint bindingindex = %u)", attribindex, bindingindex);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::VertexAttribBinding>(attribindex, bindingindex);
+
+ if (context->skipValidation() ||
+ ValidateVertexAttribBinding(context, attribindex, bindingindex))
+ {
+ context->vertexAttribBinding(attribindex, bindingindex);
+ }
+ }
+}
+
+void GL_APIENTRY VertexBindingDivisor(GLuint bindingindex, GLuint divisor)
+{
+ EVENT("(GLuint bindingindex = %u, GLuint divisor = %u)", bindingindex, divisor);
+
+ Context *context = GetValidGlobalContext();
+ if (context)
+ {
+ context->gatherParams<EntryPoint::VertexBindingDivisor>(bindingindex, divisor);
+
+ if (context->skipValidation() ||
+ ValidateVertexBindingDivisor(context, bindingindex, divisor))
+ {
+ context->vertexBindingDivisor(bindingindex, divisor);
+ }
+ }
+}
+} // namespace gl
diff --git a/src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_1_autogen.h b/src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_1_autogen.h
new file mode 100644
index 0000000000..e11d5a10bf
--- /dev/null
+++ b/src/3rdparty/angle/src/libGLESv2/entry_points_gles_3_1_autogen.h
@@ -0,0 +1,228 @@
+// GENERATED FILE - DO NOT EDIT.
+// Generated by generate_entry_points.py using data from gl.xml.
+//
+// Copyright 2017 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.
+//
+// entry_points_gles_3_1_autogen.h:
+// Defines the GLES 3.1 entry points.
+
+#ifndef LIBGLESV2_ENTRYPOINTSGLES31_AUTOGEN_H_
+#define LIBGLESV2_ENTRYPOINTSGLES31_AUTOGEN_H_
+
+#include <GLES3/gl31.h>
+#include <export.h>
+
+#include "common/platform.h"
+
+namespace gl
+{
+ANGLE_EXPORT void GL_APIENTRY DispatchCompute(GLuint num_groups_x,
+ GLuint num_groups_y,
+ GLuint num_groups_z);
+ANGLE_EXPORT void GL_APIENTRY DispatchComputeIndirect(GLintptr indirect);
+ANGLE_EXPORT void GL_APIENTRY DrawArraysIndirect(GLenum mode, const void *indirect);
+ANGLE_EXPORT void GL_APIENTRY DrawElementsIndirect(GLenum mode, GLenum type, const void *indirect);
+ANGLE_EXPORT void GL_APIENTRY FramebufferParameteri(GLenum target, GLenum pname, GLint param);
+ANGLE_EXPORT void GL_APIENTRY GetFramebufferParameteriv(GLenum target, GLenum pname, GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetProgramInterfaceiv(GLuint program,
+ GLenum programInterface,
+ GLenum pname,
+ GLint *params);
+ANGLE_EXPORT GLuint GL_APIENTRY GetProgramResourceIndex(GLuint program,
+ GLenum programInterface,
+ const GLchar *name);
+ANGLE_EXPORT void GL_APIENTRY GetProgramResourceName(GLuint program,
+ GLenum programInterface,
+ GLuint index,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLchar *name);
+ANGLE_EXPORT void GL_APIENTRY GetProgramResourceiv(GLuint program,
+ GLenum programInterface,
+ GLuint index,
+ GLsizei propCount,
+ const GLenum *props,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params);
+ANGLE_EXPORT GLint GL_APIENTRY GetProgramResourceLocation(GLuint program,
+ GLenum programInterface,
+ const GLchar *name);
+ANGLE_EXPORT void GL_APIENTRY UseProgramStages(GLuint pipeline, GLbitfield stages, GLuint program);
+ANGLE_EXPORT void GL_APIENTRY ActiveShaderProgram(GLuint pipeline, GLuint program);
+ANGLE_EXPORT GLuint GL_APIENTRY CreateShaderProgramv(GLenum type,
+ GLsizei count,
+ const GLchar *const *strings);
+ANGLE_EXPORT void GL_APIENTRY BindProgramPipeline(GLuint pipeline);
+ANGLE_EXPORT void GL_APIENTRY DeleteProgramPipelines(GLsizei n, const GLuint *pipelines);
+ANGLE_EXPORT void GL_APIENTRY GenProgramPipelines(GLsizei n, GLuint *pipelines);
+ANGLE_EXPORT GLboolean GL_APIENTRY IsProgramPipeline(GLuint pipeline);
+ANGLE_EXPORT void GL_APIENTRY GetProgramPipelineiv(GLuint pipeline, GLenum pname, GLint *params);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform1i(GLuint program, GLint location, GLint v0);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform2i(GLuint program, GLint location, GLint v0, GLint v1);
+ANGLE_EXPORT void GL_APIENTRY
+ProgramUniform3i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+ANGLE_EXPORT void GL_APIENTRY
+ProgramUniform4i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform1ui(GLuint program, GLint location, GLuint v0);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform2ui(GLuint program,
+ GLint location,
+ GLuint v0,
+ GLuint v1);
+ANGLE_EXPORT void GL_APIENTRY
+ProgramUniform3ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+ANGLE_EXPORT void GL_APIENTRY
+ProgramUniform4ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform1f(GLuint program, GLint location, GLfloat v0);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform2f(GLuint program,
+ GLint location,
+ GLfloat v0,
+ GLfloat v1);
+ANGLE_EXPORT void GL_APIENTRY
+ProgramUniform3f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+ANGLE_EXPORT void GL_APIENTRY
+ProgramUniform4f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform1iv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLint *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform2iv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLint *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform3iv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLint *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform4iv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLint *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform1uiv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLuint *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform2uiv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLuint *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform3uiv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLuint *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform4uiv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLuint *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform1fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform2fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform3fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniform4fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix2fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix3fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix4fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix2x3fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix3x2fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix2x4fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix4x2fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix3x4fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY ProgramUniformMatrix4x3fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value);
+ANGLE_EXPORT void GL_APIENTRY ValidateProgramPipeline(GLuint pipeline);
+ANGLE_EXPORT void GL_APIENTRY GetProgramPipelineInfoLog(GLuint pipeline,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLchar *infoLog);
+ANGLE_EXPORT void GL_APIENTRY BindImageTexture(GLuint unit,
+ GLuint texture,
+ GLint level,
+ GLboolean layered,
+ GLint layer,
+ GLenum access,
+ GLenum format);
+ANGLE_EXPORT void GL_APIENTRY GetBooleani_v(GLenum target, GLuint index, GLboolean *data);
+ANGLE_EXPORT void GL_APIENTRY MemoryBarrier(GLbitfield barriers);
+ANGLE_EXPORT void GL_APIENTRY MemoryBarrierByRegion(GLbitfield barriers);
+ANGLE_EXPORT void GL_APIENTRY TexStorage2DMultisample(GLenum target,
+ GLsizei samples,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLboolean fixedsamplelocations);
+ANGLE_EXPORT void GL_APIENTRY GetMultisamplefv(GLenum pname, GLuint index, GLfloat *val);
+ANGLE_EXPORT void GL_APIENTRY SampleMaski(GLuint maskNumber, GLbitfield mask);
+ANGLE_EXPORT void GL_APIENTRY GetTexLevelParameteriv(GLenum target,
+ GLint level,
+ GLenum pname,
+ GLint *params);
+ANGLE_EXPORT void GL_APIENTRY GetTexLevelParameterfv(GLenum target,
+ GLint level,
+ GLenum pname,
+ GLfloat *params);
+ANGLE_EXPORT void GL_APIENTRY BindVertexBuffer(GLuint bindingindex,
+ GLuint buffer,
+ GLintptr offset,
+ GLsizei stride);
+ANGLE_EXPORT void GL_APIENTRY VertexAttribFormat(GLuint attribindex,
+ GLint size,
+ GLenum type,
+ GLboolean normalized,
+ GLuint relativeoffset);
+ANGLE_EXPORT void GL_APIENTRY VertexAttribIFormat(GLuint attribindex,
+ GLint size,
+ GLenum type,
+ GLuint relativeoffset);
+ANGLE_EXPORT void GL_APIENTRY VertexAttribBinding(GLuint attribindex, GLuint bindingindex);
+ANGLE_EXPORT void GL_APIENTRY VertexBindingDivisor(GLuint bindingindex, GLuint divisor);
+} // namespace gl
+
+#endif // LIBGLESV2_ENTRYPOINTSGLES31_AUTOGEN_H_
diff --git a/src/3rdparty/angle/src/libGLESv2/global_state.cpp b/src/3rdparty/angle/src/libGLESv2/global_state.cpp
index b99c3e1ca9..c5f3dfe4e1 100644
--- a/src/3rdparty/angle/src/libGLESv2/global_state.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/global_state.cpp
@@ -8,229 +8,141 @@
#include "libGLESv2/global_state.h"
-#include "libANGLE/Context.h"
-#include "libANGLE/Error.h"
-
#include "common/debug.h"
#include "common/platform.h"
#include "common/tls.h"
-namespace
-{
-
-static TLSIndex currentTLS = TLS_INVALID_INDEX;
-
-struct Current
-{
- EGLint error;
- EGLenum API;
- egl::Display *display;
- egl::Surface *drawSurface;
- egl::Surface *readSurface;
- gl::Context *context;
-};
-
-Current *AllocateCurrent()
-{
- ASSERT(currentTLS != TLS_INVALID_INDEX);
- if (currentTLS == TLS_INVALID_INDEX)
- {
- return NULL;
- }
-
- Current *current = new Current();
- current->error = EGL_SUCCESS;
- current->API = EGL_OPENGL_ES_API;
- current->display = reinterpret_cast<egl::Display*>(EGL_NO_DISPLAY);
- current->drawSurface = reinterpret_cast<egl::Surface*>(EGL_NO_SURFACE);
- current->readSurface = reinterpret_cast<egl::Surface*>(EGL_NO_SURFACE);
- current->context = reinterpret_cast<gl::Context*>(EGL_NO_CONTEXT);
-
- if (!SetTLSValue(currentTLS, current))
- {
- ERR("Could not set thread local storage.");
- return NULL;
- }
+#include "libANGLE/Thread.h"
- return current;
-}
-
-Current *GetCurrentData()
+namespace gl
{
- // Create a TLS index if one has not been created for this DLL
- if (currentTLS == TLS_INVALID_INDEX)
- {
- currentTLS = CreateTLSIndex();
- }
- Current *current = reinterpret_cast<Current*>(GetTLSValue(currentTLS));
-
- // ANGLE issue 488: when the dll is loaded after thread initialization,
- // thread local storage (current) might not exist yet.
- return (current ? current : AllocateCurrent());
-}
-
-#ifdef ANGLE_PLATFORM_WINDOWS
-
-void DeallocateCurrent()
+Context *GetGlobalContext()
{
- Current *current = reinterpret_cast<Current*>(GetTLSValue(currentTLS));
- SafeDelete(current);
- SetTLSValue(currentTLS, NULL);
+ egl::Thread *thread = egl::GetCurrentThread();
+ return thread->getContext();
}
-extern "C" BOOL WINAPI DllMain(HINSTANCE, DWORD reason, LPVOID)
+Context *GetValidGlobalContext()
{
- switch (reason)
- {
- case DLL_PROCESS_ATTACH:
- currentTLS = CreateTLSIndex();
- if (currentTLS == TLS_INVALID_INDEX)
- {
- return FALSE;
- }
- AllocateCurrent();
- break;
-
- case DLL_THREAD_ATTACH:
- AllocateCurrent();
- break;
-
- case DLL_THREAD_DETACH:
- DeallocateCurrent();
- break;
-
- case DLL_PROCESS_DETACH:
- DeallocateCurrent();
- if (currentTLS != TLS_INVALID_INDEX)
- {
- DestroyTLSIndex(currentTLS);
- currentTLS = TLS_INVALID_INDEX;
- }
- break;
- }
-
- return TRUE;
+ egl::Thread *thread = egl::GetCurrentThread();
+ return thread->getValidContext();
}
-#endif
-}
+} // namespace gl
-namespace gl
+namespace egl
{
-Context *GetGlobalContext()
+namespace
{
- Current *current = GetCurrentData();
- return current->context;
-}
+static TLSIndex threadTLS = TLS_INVALID_INDEX;
-Context *GetValidGlobalContext()
+Thread *AllocateCurrentThread()
{
- gl::Context *context = GetGlobalContext();
- if (context)
+ ASSERT(threadTLS != TLS_INVALID_INDEX);
+ if (threadTLS == TLS_INVALID_INDEX)
{
- if (context->isContextLost())
- {
- context->recordError(gl::Error(GL_OUT_OF_MEMORY, "Context has been lost."));
- return nullptr;
- }
- else
- {
- return context;
- }
+ return nullptr;
+ }
+
+ Thread *thread = new Thread();
+ if (!SetTLSValue(threadTLS, thread))
+ {
+ ERR() << "Could not set thread local storage.";
+ return nullptr;
}
- return nullptr;
-}
+ return thread;
}
-namespace egl
-{
+} // anonymous namespace
-void SetGlobalError(const Error &error)
+Thread *GetCurrentThread()
{
- Current *current = GetCurrentData();
-
- current->error = error.getCode();
-}
+ // Create a TLS index if one has not been created for this DLL
+ if (threadTLS == TLS_INVALID_INDEX)
+ {
+ threadTLS = CreateTLSIndex();
+ }
-EGLint GetGlobalError()
-{
- Current *current = GetCurrentData();
+ Thread *current = static_cast<Thread *>(GetTLSValue(threadTLS));
- return current->error;
+ // ANGLE issue 488: when the dll is loaded after thread initialization,
+ // thread local storage (current) might not exist yet.
+ return (current ? current : AllocateCurrentThread());
}
-EGLenum GetGlobalAPI()
-{
- Current *current = GetCurrentData();
-
- return current->API;
-}
+} // namespace egl
-void SetGlobalAPI(EGLenum API)
+#ifdef ANGLE_PLATFORM_WINDOWS
+namespace egl
{
- Current *current = GetCurrentData();
-
- current->API = API;
-}
-void SetGlobalDisplay(Display *dpy)
+namespace
{
- Current *current = GetCurrentData();
-
- current->display = dpy;
-}
-Display *GetGlobalDisplay()
+bool DeallocateCurrentThread()
{
- Current *current = GetCurrentData();
-
- return current->display;
+ Thread *thread = static_cast<Thread *>(GetTLSValue(threadTLS));
+ SafeDelete(thread);
+ return SetTLSValue(threadTLS, nullptr);
}
-void SetGlobalDrawSurface(Surface *surface)
+bool InitializeProcess()
{
- Current *current = GetCurrentData();
+ threadTLS = CreateTLSIndex();
+ if (threadTLS == TLS_INVALID_INDEX)
+ {
+ return false;
+ }
- current->drawSurface = surface;
+ return AllocateCurrentThread() != nullptr;
}
-Surface *GetGlobalDrawSurface()
+bool TerminateProcess()
{
- Current *current = GetCurrentData();
+ if (!DeallocateCurrentThread())
+ {
+ return false;
+ }
- return current->drawSurface;
-}
+ if (threadTLS != TLS_INVALID_INDEX)
+ {
+ TLSIndex tlsCopy = threadTLS;
+ threadTLS = TLS_INVALID_INDEX;
-void SetGlobalReadSurface(Surface *surface)
-{
- Current *current = GetCurrentData();
+ if (!DestroyTLSIndex(tlsCopy))
+ {
+ return false;
+ }
+ }
- current->readSurface = surface;
+ return true;
}
-Surface *GetGlobalReadSurface()
-{
- Current *current = GetCurrentData();
+} // anonymous namespace
- return current->readSurface;
-}
+} // namespace egl
-void SetGlobalContext(gl::Context *context)
+extern "C" BOOL WINAPI DllMain(HINSTANCE, DWORD reason, LPVOID)
{
- Current *current = GetCurrentData();
+ switch (reason)
+ {
+ case DLL_PROCESS_ATTACH:
+ return static_cast<BOOL>(egl::InitializeProcess());
- current->context = context;
-}
+ case DLL_THREAD_ATTACH:
+ return static_cast<BOOL>(egl::AllocateCurrentThread() != nullptr);
-gl::Context *GetGlobalContext()
-{
- Current *current = GetCurrentData();
+ case DLL_THREAD_DETACH:
+ return static_cast<BOOL>(egl::DeallocateCurrentThread());
- return current->context;
-}
+ case DLL_PROCESS_DETACH:
+ return static_cast<BOOL>(egl::TerminateProcess());
+ }
+ return TRUE;
}
+#endif // ANGLE_PLATFORM_WINDOWS
diff --git a/src/3rdparty/angle/src/libGLESv2/global_state.h b/src/3rdparty/angle/src/libGLESv2/global_state.h
index db202539cb..3e3740c90e 100644
--- a/src/3rdparty/angle/src/libGLESv2/global_state.h
+++ b/src/3rdparty/angle/src/libGLESv2/global_state.h
@@ -9,8 +9,6 @@
#ifndef LIBGLESV2_GLOBALSTATE_H_
#define LIBGLESV2_GLOBALSTATE_H_
-#include <EGL/egl.h>
-
namespace gl
{
class Context;
@@ -18,32 +16,14 @@ class Context;
Context *GetGlobalContext();
Context *GetValidGlobalContext();
-}
+} // namespace gl
namespace egl
{
-class Error;
-class Display;
-class Surface;
-
-void SetGlobalError(const Error &error);
-EGLint GetGlobalError();
-
-void SetGlobalAPI(EGLenum API);
-EGLenum GetGlobalAPI();
-
-void SetGlobalDisplay(Display *dpy);
-Display *GetGlobalDisplay();
-
-void SetGlobalDrawSurface(Surface *surface);
-Surface *GetGlobalDrawSurface();
-
-void SetGlobalReadSurface(Surface *surface);
-Surface *GetGlobalReadSurface();
+class Thread;
-void SetGlobalContext(gl::Context *context);
-gl::Context *GetGlobalContext();
+Thread *GetCurrentThread();
-}
+} // namespace egl
#endif // LIBGLESV2_GLOBALSTATE_H_
diff --git a/src/3rdparty/angle/src/libGLESv2/libGLESv2.cpp b/src/3rdparty/angle/src/libGLESv2/libGLESv2.cpp
index 42b749f373..ffd78a2ac0 100644
--- a/src/3rdparty/angle/src/libGLESv2/libGLESv2.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/libGLESv2.cpp
@@ -6,14 +6,14 @@
// libGLESv2.cpp: Implements the exported OpenGL ES 2.0 functions.
-#include "libGLESv2/entry_points_gles_2_0.h"
+#include "libGLESv2/entry_points_gles_2_0_autogen.h"
#include "libGLESv2/entry_points_gles_2_0_ext.h"
-#include "libGLESv2/entry_points_gles_3_0.h"
+#include "libGLESv2/entry_points_gles_3_0_autogen.h"
+#include "libGLESv2/entry_points_gles_3_1_autogen.h"
#include "common/event_tracer.h"
-extern "C"
-{
+extern "C" {
void GL_APIENTRY glActiveTexture(GLenum texture)
{
@@ -25,7 +25,7 @@ void GL_APIENTRY glAttachShader(GLuint program, GLuint shader)
return gl::AttachShader(program, shader);
}
-void GL_APIENTRY glBindAttribLocation(GLuint program, GLuint index, const GLchar* name)
+void GL_APIENTRY glBindAttribLocation(GLuint program, GLuint index, const GLchar *name)
{
return gl::BindAttribLocation(program, index, name);
}
@@ -75,12 +75,12 @@ void GL_APIENTRY glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlp
return gl::BlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
}
-void GL_APIENTRY glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage)
+void GL_APIENTRY glBufferData(GLenum target, GLsizeiptr size, const void *data, GLenum usage)
{
return gl::BufferData(target, size, data, usage);
}
-void GL_APIENTRY glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data)
+void GL_APIENTRY glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const void *data)
{
return gl::BufferSubData(target, offset, size, data);
}
@@ -120,22 +120,53 @@ void GL_APIENTRY glCompileShader(GLuint shader)
return gl::CompileShader(shader);
}
-void GL_APIENTRY glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data)
+void GL_APIENTRY glCompressedTexImage2D(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLint border,
+ GLsizei imageSize,
+ const void *data)
{
- return gl::CompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
+ return gl::CompressedTexImage2D(target, level, internalformat, width, height, border, imageSize,
+ data);
}
-void GL_APIENTRY glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data)
+void GL_APIENTRY glCompressedTexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLsizei imageSize,
+ const void *data)
{
- return gl::CompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
+ return gl::CompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format,
+ imageSize, data);
}
-void GL_APIENTRY glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+void GL_APIENTRY glCopyTexImage2D(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLint border)
{
return gl::CopyTexImage2D(target, level, internalformat, x, y, width, height, border);
}
-void GL_APIENTRY glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+void GL_APIENTRY glCopyTexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height)
{
return gl::CopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
}
@@ -155,12 +186,12 @@ void GL_APIENTRY glCullFace(GLenum mode)
return gl::CullFace(mode);
}
-void GL_APIENTRY glDeleteBuffers(GLsizei n, const GLuint* buffers)
+void GL_APIENTRY glDeleteBuffers(GLsizei n, const GLuint *buffers)
{
return gl::DeleteBuffers(n, buffers);
}
-void GL_APIENTRY glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers)
+void GL_APIENTRY glDeleteFramebuffers(GLsizei n, const GLuint *framebuffers)
{
return gl::DeleteFramebuffers(n, framebuffers);
}
@@ -170,7 +201,7 @@ void GL_APIENTRY glDeleteProgram(GLuint program)
return gl::DeleteProgram(program);
}
-void GL_APIENTRY glDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers)
+void GL_APIENTRY glDeleteRenderbuffers(GLsizei n, const GLuint *renderbuffers)
{
return gl::DeleteRenderbuffers(n, renderbuffers);
}
@@ -180,7 +211,7 @@ void GL_APIENTRY glDeleteShader(GLuint shader)
return gl::DeleteShader(shader);
}
-void GL_APIENTRY glDeleteTextures(GLsizei n, const GLuint* textures)
+void GL_APIENTRY glDeleteTextures(GLsizei n, const GLuint *textures)
{
return gl::DeleteTextures(n, textures);
}
@@ -220,7 +251,7 @@ void GL_APIENTRY glDrawArrays(GLenum mode, GLint first, GLsizei count)
return gl::DrawArrays(mode, first, count);
}
-void GL_APIENTRY glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices)
+void GL_APIENTRY glDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices)
{
return gl::DrawElements(mode, count, type, indices);
}
@@ -245,12 +276,19 @@ void GL_APIENTRY glFlush(void)
return gl::Flush();
}
-void GL_APIENTRY glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
+void GL_APIENTRY glFramebufferRenderbuffer(GLenum target,
+ GLenum attachment,
+ GLenum renderbuffertarget,
+ GLuint renderbuffer)
{
return gl::FramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
}
-void GL_APIENTRY glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
+void GL_APIENTRY glFramebufferTexture2D(GLenum target,
+ GLenum attachment,
+ GLenum textarget,
+ GLuint texture,
+ GLint level)
{
return gl::FramebufferTexture2D(target, attachment, textarget, texture, level);
}
@@ -260,7 +298,7 @@ void GL_APIENTRY glFrontFace(GLenum mode)
return gl::FrontFace(mode);
}
-void GL_APIENTRY glGenBuffers(GLsizei n, GLuint* buffers)
+void GL_APIENTRY glGenBuffers(GLsizei n, GLuint *buffers)
{
return gl::GenBuffers(n, buffers);
}
@@ -270,47 +308,62 @@ void GL_APIENTRY glGenerateMipmap(GLenum target)
return gl::GenerateMipmap(target);
}
-void GL_APIENTRY glGenFramebuffers(GLsizei n, GLuint* framebuffers)
+void GL_APIENTRY glGenFramebuffers(GLsizei n, GLuint *framebuffers)
{
return gl::GenFramebuffers(n, framebuffers);
}
-void GL_APIENTRY glGenRenderbuffers(GLsizei n, GLuint* renderbuffers)
+void GL_APIENTRY glGenRenderbuffers(GLsizei n, GLuint *renderbuffers)
{
return gl::GenRenderbuffers(n, renderbuffers);
}
-void GL_APIENTRY glGenTextures(GLsizei n, GLuint* textures)
+void GL_APIENTRY glGenTextures(GLsizei n, GLuint *textures)
{
return gl::GenTextures(n, textures);
}
-void GL_APIENTRY glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name)
+void GL_APIENTRY glGetActiveAttrib(GLuint program,
+ GLuint index,
+ GLsizei bufsize,
+ GLsizei *length,
+ GLint *size,
+ GLenum *type,
+ GLchar *name)
{
return gl::GetActiveAttrib(program, index, bufsize, length, size, type, name);
}
-void GL_APIENTRY glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name)
+void GL_APIENTRY glGetActiveUniform(GLuint program,
+ GLuint index,
+ GLsizei bufsize,
+ GLsizei *length,
+ GLint *size,
+ GLenum *type,
+ GLchar *name)
{
return gl::GetActiveUniform(program, index, bufsize, length, size, type, name);
}
-void GL_APIENTRY glGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
+void GL_APIENTRY glGetAttachedShaders(GLuint program,
+ GLsizei maxcount,
+ GLsizei *count,
+ GLuint *shaders)
{
return gl::GetAttachedShaders(program, maxcount, count, shaders);
}
-GLint GL_APIENTRY glGetAttribLocation(GLuint program, const GLchar* name)
+GLint GL_APIENTRY glGetAttribLocation(GLuint program, const GLchar *name)
{
return gl::GetAttribLocation(program, name);
}
-void GL_APIENTRY glGetBooleanv(GLenum pname, GLboolean* params)
+void GL_APIENTRY glGetBooleanv(GLenum pname, GLboolean *params)
{
return gl::GetBooleanv(pname, params);
}
-void GL_APIENTRY glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params)
+void GL_APIENTRY glGetBufferParameteriv(GLenum target, GLenum pname, GLint *params)
{
return gl::GetBufferParameteriv(target, pname, params);
}
@@ -320,97 +373,109 @@ GLenum GL_APIENTRY glGetError(void)
return gl::GetError();
}
-void GL_APIENTRY glGetFloatv(GLenum pname, GLfloat* params)
+void GL_APIENTRY glGetFloatv(GLenum pname, GLfloat *params)
{
return gl::GetFloatv(pname, params);
}
-void GL_APIENTRY glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params)
+void GL_APIENTRY glGetFramebufferAttachmentParameteriv(GLenum target,
+ GLenum attachment,
+ GLenum pname,
+ GLint *params)
{
return gl::GetFramebufferAttachmentParameteriv(target, attachment, pname, params);
}
-void GL_APIENTRY glGetIntegerv(GLenum pname, GLint* params)
+void GL_APIENTRY glGetIntegerv(GLenum pname, GLint *params)
{
return gl::GetIntegerv(pname, params);
}
-void GL_APIENTRY glGetProgramiv(GLuint program, GLenum pname, GLint* params)
+void GL_APIENTRY glGetProgramiv(GLuint program, GLenum pname, GLint *params)
{
return gl::GetProgramiv(program, pname, params);
}
-void GL_APIENTRY glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog)
+void GL_APIENTRY glGetProgramInfoLog(GLuint program,
+ GLsizei bufsize,
+ GLsizei *length,
+ GLchar *infolog)
{
return gl::GetProgramInfoLog(program, bufsize, length, infolog);
}
-void GL_APIENTRY glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params)
+void GL_APIENTRY glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint *params)
{
return gl::GetRenderbufferParameteriv(target, pname, params);
}
-void GL_APIENTRY glGetShaderiv(GLuint shader, GLenum pname, GLint* params)
+void GL_APIENTRY glGetShaderiv(GLuint shader, GLenum pname, GLint *params)
{
return gl::GetShaderiv(shader, pname, params);
}
-void GL_APIENTRY glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog)
+void GL_APIENTRY glGetShaderInfoLog(GLuint shader,
+ GLsizei bufsize,
+ GLsizei *length,
+ GLchar *infolog)
{
return gl::GetShaderInfoLog(shader, bufsize, length, infolog);
}
-void GL_APIENTRY glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
+void GL_APIENTRY glGetShaderPrecisionFormat(GLenum shadertype,
+ GLenum precisiontype,
+ GLint *range,
+ GLint *precision)
{
return gl::GetShaderPrecisionFormat(shadertype, precisiontype, range, precision);
}
-void GL_APIENTRY glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source)
+void GL_APIENTRY glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source)
{
return gl::GetShaderSource(shader, bufsize, length, source);
}
-const GLubyte* GL_APIENTRY glGetString(GLenum name)
+const GLubyte *GL_APIENTRY glGetString(GLenum name)
{
return gl::GetString(name);
}
-void GL_APIENTRY glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)
+void GL_APIENTRY glGetTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
{
return gl::GetTexParameterfv(target, pname, params);
}
-void GL_APIENTRY glGetTexParameteriv(GLenum target, GLenum pname, GLint* params)
+void GL_APIENTRY glGetTexParameteriv(GLenum target, GLenum pname, GLint *params)
{
return gl::GetTexParameteriv(target, pname, params);
}
-void GL_APIENTRY glGetUniformfv(GLuint program, GLint location, GLfloat* params)
+void GL_APIENTRY glGetUniformfv(GLuint program, GLint location, GLfloat *params)
{
return gl::GetUniformfv(program, location, params);
}
-void GL_APIENTRY glGetUniformiv(GLuint program, GLint location, GLint* params)
+void GL_APIENTRY glGetUniformiv(GLuint program, GLint location, GLint *params)
{
return gl::GetUniformiv(program, location, params);
}
-GLint GL_APIENTRY glGetUniformLocation(GLuint program, const GLchar* name)
+GLint GL_APIENTRY glGetUniformLocation(GLuint program, const GLchar *name)
{
return gl::GetUniformLocation(program, name);
}
-void GL_APIENTRY glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params)
+void GL_APIENTRY glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat *params)
{
return gl::GetVertexAttribfv(index, pname, params);
}
-void GL_APIENTRY glGetVertexAttribiv(GLuint index, GLenum pname, GLint* params)
+void GL_APIENTRY glGetVertexAttribiv(GLuint index, GLenum pname, GLint *params)
{
return gl::GetVertexAttribiv(index, pname, params);
}
-void GL_APIENTRY glGetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid** pointer)
+void GL_APIENTRY glGetVertexAttribPointerv(GLuint index, GLenum pname, void **pointer)
{
return gl::GetVertexAttribPointerv(index, pname, pointer);
}
@@ -475,7 +540,13 @@ void GL_APIENTRY glPolygonOffset(GLfloat factor, GLfloat units)
return gl::PolygonOffset(factor, units);
}
-void GL_APIENTRY glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels)
+void GL_APIENTRY glReadPixels(GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ void *pixels)
{
return gl::ReadPixels(x, y, width, height, format, type, pixels);
}
@@ -485,7 +556,10 @@ void GL_APIENTRY glReleaseShaderCompiler(void)
return gl::ReleaseShaderCompiler();
}
-void GL_APIENTRY glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
+void GL_APIENTRY glRenderbufferStorage(GLenum target,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height)
{
return gl::RenderbufferStorage(target, internalformat, width, height);
}
@@ -500,12 +574,19 @@ void GL_APIENTRY glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
return gl::Scissor(x, y, width, height);
}
-void GL_APIENTRY glShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length)
+void GL_APIENTRY glShaderBinary(GLsizei n,
+ const GLuint *shaders,
+ GLenum binaryformat,
+ const void *binary,
+ GLsizei length)
{
return gl::ShaderBinary(n, shaders, binaryformat, binary, length);
}
-void GL_APIENTRY glShaderSource(GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length)
+void GL_APIENTRY glShaderSource(GLuint shader,
+ GLsizei count,
+ const GLchar *const *string,
+ const GLint *length)
{
return gl::ShaderSource(shader, count, string, length);
}
@@ -540,9 +621,18 @@ void GL_APIENTRY glStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLe
return gl::StencilOpSeparate(face, fail, zfail, zpass);
}
-void GL_APIENTRY glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels)
+void GL_APIENTRY glTexImage2D(GLenum target,
+ GLint level,
+ GLint internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLint border,
+ GLenum format,
+ GLenum type,
+ const void *pixels)
{
- return gl::TexImage2D(target, level, internalformat, width, height, border, format, type, pixels);
+ return gl::TexImage2D(target, level, internalformat, width, height, border, format, type,
+ pixels);
}
void GL_APIENTRY glTexParameterf(GLenum target, GLenum pname, GLfloat param)
@@ -550,7 +640,7 @@ void GL_APIENTRY glTexParameterf(GLenum target, GLenum pname, GLfloat param)
return gl::TexParameterf(target, pname, param);
}
-void GL_APIENTRY glTexParameterfv(GLenum target, GLenum pname, const GLfloat* params)
+void GL_APIENTRY glTexParameterfv(GLenum target, GLenum pname, const GLfloat *params)
{
return gl::TexParameterfv(target, pname, params);
}
@@ -560,12 +650,20 @@ void GL_APIENTRY glTexParameteri(GLenum target, GLenum pname, GLint param)
return gl::TexParameteri(target, pname, param);
}
-void GL_APIENTRY glTexParameteriv(GLenum target, GLenum pname, const GLint* params)
+void GL_APIENTRY glTexParameteriv(GLenum target, GLenum pname, const GLint *params)
{
return gl::TexParameteriv(target, pname, params);
}
-void GL_APIENTRY glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels)
+void GL_APIENTRY glTexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ const void *pixels)
{
return gl::TexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
}
@@ -575,7 +673,7 @@ void GL_APIENTRY glUniform1f(GLint location, GLfloat x)
return gl::Uniform1f(location, x);
}
-void GL_APIENTRY glUniform1fv(GLint location, GLsizei count, const GLfloat* v)
+void GL_APIENTRY glUniform1fv(GLint location, GLsizei count, const GLfloat *v)
{
return gl::Uniform1fv(location, count, v);
}
@@ -585,7 +683,7 @@ void GL_APIENTRY glUniform1i(GLint location, GLint x)
return gl::Uniform1i(location, x);
}
-void GL_APIENTRY glUniform1iv(GLint location, GLsizei count, const GLint* v)
+void GL_APIENTRY glUniform1iv(GLint location, GLsizei count, const GLint *v)
{
return gl::Uniform1iv(location, count, v);
}
@@ -595,7 +693,7 @@ void GL_APIENTRY glUniform2f(GLint location, GLfloat x, GLfloat y)
return gl::Uniform2f(location, x, y);
}
-void GL_APIENTRY glUniform2fv(GLint location, GLsizei count, const GLfloat* v)
+void GL_APIENTRY glUniform2fv(GLint location, GLsizei count, const GLfloat *v)
{
return gl::Uniform2fv(location, count, v);
}
@@ -605,7 +703,7 @@ void GL_APIENTRY glUniform2i(GLint location, GLint x, GLint y)
return gl::Uniform2i(location, x, y);
}
-void GL_APIENTRY glUniform2iv(GLint location, GLsizei count, const GLint* v)
+void GL_APIENTRY glUniform2iv(GLint location, GLsizei count, const GLint *v)
{
return gl::Uniform2iv(location, count, v);
}
@@ -615,7 +713,7 @@ void GL_APIENTRY glUniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)
return gl::Uniform3f(location, x, y, z);
}
-void GL_APIENTRY glUniform3fv(GLint location, GLsizei count, const GLfloat* v)
+void GL_APIENTRY glUniform3fv(GLint location, GLsizei count, const GLfloat *v)
{
return gl::Uniform3fv(location, count, v);
}
@@ -625,7 +723,7 @@ void GL_APIENTRY glUniform3i(GLint location, GLint x, GLint y, GLint z)
return gl::Uniform3i(location, x, y, z);
}
-void GL_APIENTRY glUniform3iv(GLint location, GLsizei count, const GLint* v)
+void GL_APIENTRY glUniform3iv(GLint location, GLsizei count, const GLint *v)
{
return gl::Uniform3iv(location, count, v);
}
@@ -635,7 +733,7 @@ void GL_APIENTRY glUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GL
return gl::Uniform4f(location, x, y, z, w);
}
-void GL_APIENTRY glUniform4fv(GLint location, GLsizei count, const GLfloat* v)
+void GL_APIENTRY glUniform4fv(GLint location, GLsizei count, const GLfloat *v)
{
return gl::Uniform4fv(location, count, v);
}
@@ -645,22 +743,31 @@ void GL_APIENTRY glUniform4i(GLint location, GLint x, GLint y, GLint z, GLint w)
return gl::Uniform4i(location, x, y, z, w);
}
-void GL_APIENTRY glUniform4iv(GLint location, GLsizei count, const GLint* v)
+void GL_APIENTRY glUniform4iv(GLint location, GLsizei count, const GLint *v)
{
return gl::Uniform4iv(location, count, v);
}
-void GL_APIENTRY glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+void GL_APIENTRY glUniformMatrix2fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
{
return gl::UniformMatrix2fv(location, count, transpose, value);
}
-void GL_APIENTRY glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+void GL_APIENTRY glUniformMatrix3fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
{
return gl::UniformMatrix3fv(location, count, transpose, value);
}
-void GL_APIENTRY glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+void GL_APIENTRY glUniformMatrix4fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
{
return gl::UniformMatrix4fv(location, count, transpose, value);
}
@@ -680,7 +787,7 @@ void GL_APIENTRY glVertexAttrib1f(GLuint indx, GLfloat x)
return gl::VertexAttrib1f(indx, x);
}
-void GL_APIENTRY glVertexAttrib1fv(GLuint indx, const GLfloat* values)
+void GL_APIENTRY glVertexAttrib1fv(GLuint indx, const GLfloat *values)
{
return gl::VertexAttrib1fv(indx, values);
}
@@ -690,7 +797,7 @@ void GL_APIENTRY glVertexAttrib2f(GLuint indx, GLfloat x, GLfloat y)
return gl::VertexAttrib2f(indx, x, y);
}
-void GL_APIENTRY glVertexAttrib2fv(GLuint indx, const GLfloat* values)
+void GL_APIENTRY glVertexAttrib2fv(GLuint indx, const GLfloat *values)
{
return gl::VertexAttrib2fv(indx, values);
}
@@ -700,7 +807,7 @@ void GL_APIENTRY glVertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z)
return gl::VertexAttrib3f(indx, x, y, z);
}
-void GL_APIENTRY glVertexAttrib3fv(GLuint indx, const GLfloat* values)
+void GL_APIENTRY glVertexAttrib3fv(GLuint indx, const GLfloat *values)
{
return gl::VertexAttrib3fv(indx, values);
}
@@ -710,12 +817,17 @@ void GL_APIENTRY glVertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z,
return gl::VertexAttrib4f(indx, x, y, z, w);
}
-void GL_APIENTRY glVertexAttrib4fv(GLuint indx, const GLfloat* values)
+void GL_APIENTRY glVertexAttrib4fv(GLuint indx, const GLfloat *values)
{
return gl::VertexAttrib4fv(indx, values);
}
-void GL_APIENTRY glVertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr)
+void GL_APIENTRY glVertexAttribPointer(GLuint indx,
+ GLint size,
+ GLenum type,
+ GLboolean normalized,
+ GLsizei stride,
+ const void *ptr)
{
return gl::VertexAttribPointer(indx, size, type, normalized, stride, ptr);
}
@@ -730,42 +842,96 @@ void GL_APIENTRY glReadBuffer(GLenum mode)
return gl::ReadBuffer(mode);
}
-void GL_APIENTRY glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices)
+void GL_APIENTRY glDrawRangeElements(GLenum mode,
+ GLuint start,
+ GLuint end,
+ GLsizei count,
+ GLenum type,
+ const void *indices)
{
return gl::DrawRangeElements(mode, start, end, count, type, indices);
}
-void GL_APIENTRY glTexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels)
-{
- return gl::TexImage3D(target, level, internalformat, width, height, depth, border, format, type, pixels);
-}
-
-void GL_APIENTRY glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels)
-{
- return gl::TexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
-}
-
-void GL_APIENTRY glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+void GL_APIENTRY glTexImage3D(GLenum target,
+ GLint level,
+ GLint internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth,
+ GLint border,
+ GLenum format,
+ GLenum type,
+ const void *pixels)
+{
+ return gl::TexImage3D(target, level, internalformat, width, height, depth, border, format, type,
+ pixels);
+}
+
+void GL_APIENTRY glTexSubImage3D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLint zoffset,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth,
+ GLenum format,
+ GLenum type,
+ const void *pixels)
+{
+ return gl::TexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format,
+ type, pixels);
+}
+
+void GL_APIENTRY glCopyTexSubImage3D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLint zoffset,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height)
{
return gl::CopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height);
}
-void GL_APIENTRY glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data)
+void GL_APIENTRY glCompressedTexImage3D(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth,
+ GLint border,
+ GLsizei imageSize,
+ const void *data)
{
- return gl::CompressedTexImage3D(target, level, internalformat, width, height, depth, border, imageSize, data);
+ return gl::CompressedTexImage3D(target, level, internalformat, width, height, depth, border,
+ imageSize, data);
}
-void GL_APIENTRY glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data)
+void GL_APIENTRY glCompressedTexSubImage3D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLint zoffset,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth,
+ GLenum format,
+ GLsizei imageSize,
+ const void *data)
{
- return gl::CompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
+ return gl::CompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height,
+ depth, format, imageSize, data);
}
-void GL_APIENTRY glGenQueries(GLsizei n, GLuint* ids)
+void GL_APIENTRY glGenQueries(GLsizei n, GLuint *ids)
{
return gl::GenQueries(n, ids);
}
-void GL_APIENTRY glDeleteQueries(GLsizei n, const GLuint* ids)
+void GL_APIENTRY glDeleteQueries(GLsizei n, const GLuint *ids)
{
return gl::DeleteQueries(n, ids);
}
@@ -785,12 +951,12 @@ void GL_APIENTRY glEndQuery(GLenum target)
return gl::EndQuery(target);
}
-void GL_APIENTRY glGetQueryiv(GLenum target, GLenum pname, GLint* params)
+void GL_APIENTRY glGetQueryiv(GLenum target, GLenum pname, GLint *params)
{
return gl::GetQueryiv(target, pname, params);
}
-void GL_APIENTRY glGetQueryObjectuiv(GLuint id, GLenum pname, GLuint* params)
+void GL_APIENTRY glGetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params)
{
return gl::GetQueryObjectuiv(id, pname, params);
}
@@ -800,62 +966,101 @@ GLboolean GL_APIENTRY glUnmapBuffer(GLenum target)
return gl::UnmapBuffer(target);
}
-void GL_APIENTRY glGetBufferPointerv(GLenum target, GLenum pname, GLvoid** params)
+void GL_APIENTRY glGetBufferPointerv(GLenum target, GLenum pname, void **params)
{
return gl::GetBufferPointerv(target, pname, params);
}
-void GL_APIENTRY glDrawBuffers(GLsizei n, const GLenum* bufs)
+void GL_APIENTRY glDrawBuffers(GLsizei n, const GLenum *bufs)
{
return gl::DrawBuffers(n, bufs);
}
-void GL_APIENTRY glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+void GL_APIENTRY glUniformMatrix2x3fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
{
return gl::UniformMatrix2x3fv(location, count, transpose, value);
}
-void GL_APIENTRY glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+void GL_APIENTRY glUniformMatrix3x2fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
{
return gl::UniformMatrix3x2fv(location, count, transpose, value);
}
-void GL_APIENTRY glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+void GL_APIENTRY glUniformMatrix2x4fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
{
return gl::UniformMatrix2x4fv(location, count, transpose, value);
}
-void GL_APIENTRY glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+void GL_APIENTRY glUniformMatrix4x2fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
{
return gl::UniformMatrix4x2fv(location, count, transpose, value);
}
-void GL_APIENTRY glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+void GL_APIENTRY glUniformMatrix3x4fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
{
return gl::UniformMatrix3x4fv(location, count, transpose, value);
}
-void GL_APIENTRY glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+void GL_APIENTRY glUniformMatrix4x3fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
{
return gl::UniformMatrix4x3fv(location, count, transpose, value);
}
-void GL_APIENTRY glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
+void GL_APIENTRY glBlitFramebuffer(GLint srcX0,
+ GLint srcY0,
+ GLint srcX1,
+ GLint srcY1,
+ GLint dstX0,
+ GLint dstY0,
+ GLint dstX1,
+ GLint dstY1,
+ GLbitfield mask,
+ GLenum filter)
{
- return gl::BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
+ return gl::BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask,
+ filter);
}
-void GL_APIENTRY glRenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
+void GL_APIENTRY glRenderbufferStorageMultisample(GLenum target,
+ GLsizei samples,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height)
{
return gl::RenderbufferStorageMultisample(target, samples, internalformat, width, height);
}
-void GL_APIENTRY glFramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)
+void GL_APIENTRY glFramebufferTextureLayer(GLenum target,
+ GLenum attachment,
+ GLuint texture,
+ GLint level,
+ GLint layer)
{
return gl::FramebufferTextureLayer(target, attachment, texture, level, layer);
}
-GLvoid* GL_APIENTRY glMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
+void *GL_APIENTRY glMapBufferRange(GLenum target,
+ GLintptr offset,
+ GLsizeiptr length,
+ GLbitfield access)
{
return gl::MapBufferRange(target, offset, length, access);
}
@@ -870,12 +1075,12 @@ void GL_APIENTRY glBindVertexArray(GLuint array)
return gl::BindVertexArray(array);
}
-void GL_APIENTRY glDeleteVertexArrays(GLsizei n, const GLuint* arrays)
+void GL_APIENTRY glDeleteVertexArrays(GLsizei n, const GLuint *arrays)
{
return gl::DeleteVertexArrays(n, arrays);
}
-void GL_APIENTRY glGenVertexArrays(GLsizei n, GLuint* arrays)
+void GL_APIENTRY glGenVertexArrays(GLsizei n, GLuint *arrays)
{
return gl::GenVertexArrays(n, arrays);
}
@@ -885,7 +1090,7 @@ GLboolean GL_APIENTRY glIsVertexArray(GLuint array)
return gl::IsVertexArray(array);
}
-void GL_APIENTRY glGetIntegeri_v(GLenum target, GLuint index, GLint* data)
+void GL_APIENTRY glGetIntegeri_v(GLenum target, GLuint index, GLint *data)
{
return gl::GetIntegeri_v(target, index, data);
}
@@ -900,7 +1105,8 @@ void GL_APIENTRY glEndTransformFeedback(void)
return gl::EndTransformFeedback();
}
-void GL_APIENTRY glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
+void GL_APIENTRY
+glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
{
return gl::BindBufferRange(target, index, buffer, offset, size);
}
@@ -910,27 +1116,37 @@ void GL_APIENTRY glBindBufferBase(GLenum target, GLuint index, GLuint buffer)
return gl::BindBufferBase(target, index, buffer);
}
-void GL_APIENTRY glTransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar* const* varyings, GLenum bufferMode)
+void GL_APIENTRY glTransformFeedbackVaryings(GLuint program,
+ GLsizei count,
+ const GLchar *const *varyings,
+ GLenum bufferMode)
{
return gl::TransformFeedbackVaryings(program, count, varyings, bufferMode);
}
-void GL_APIENTRY glGetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name)
+void GL_APIENTRY glGetTransformFeedbackVarying(GLuint program,
+ GLuint index,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLsizei *size,
+ GLenum *type,
+ GLchar *name)
{
return gl::GetTransformFeedbackVarying(program, index, bufSize, length, size, type, name);
}
-void GL_APIENTRY glVertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer)
+void GL_APIENTRY
+glVertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer)
{
return gl::VertexAttribIPointer(index, size, type, stride, pointer);
}
-void GL_APIENTRY glGetVertexAttribIiv(GLuint index, GLenum pname, GLint* params)
+void GL_APIENTRY glGetVertexAttribIiv(GLuint index, GLenum pname, GLint *params)
{
return gl::GetVertexAttribIiv(index, pname, params);
}
-void GL_APIENTRY glGetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params)
+void GL_APIENTRY glGetVertexAttribIuiv(GLuint index, GLenum pname, GLuint *params)
{
return gl::GetVertexAttribIuiv(index, pname, params);
}
@@ -945,17 +1161,17 @@ void GL_APIENTRY glVertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z,
return gl::VertexAttribI4ui(index, x, y, z, w);
}
-void GL_APIENTRY glVertexAttribI4iv(GLuint index, const GLint* v)
+void GL_APIENTRY glVertexAttribI4iv(GLuint index, const GLint *v)
{
return gl::VertexAttribI4iv(index, v);
}
-void GL_APIENTRY glVertexAttribI4uiv(GLuint index, const GLuint* v)
+void GL_APIENTRY glVertexAttribI4uiv(GLuint index, const GLuint *v)
{
return gl::VertexAttribI4uiv(index, v);
}
-void GL_APIENTRY glGetUniformuiv(GLuint program, GLint location, GLuint* params)
+void GL_APIENTRY glGetUniformuiv(GLuint program, GLint location, GLuint *params)
{
return gl::GetUniformuiv(program, location, params);
}
@@ -985,37 +1201,37 @@ void GL_APIENTRY glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, G
return gl::Uniform4ui(location, v0, v1, v2, v3);
}
-void GL_APIENTRY glUniform1uiv(GLint location, GLsizei count, const GLuint* value)
+void GL_APIENTRY glUniform1uiv(GLint location, GLsizei count, const GLuint *value)
{
return gl::Uniform1uiv(location, count, value);
}
-void GL_APIENTRY glUniform2uiv(GLint location, GLsizei count, const GLuint* value)
+void GL_APIENTRY glUniform2uiv(GLint location, GLsizei count, const GLuint *value)
{
return gl::Uniform2uiv(location, count, value);
}
-void GL_APIENTRY glUniform3uiv(GLint location, GLsizei count, const GLuint* value)
+void GL_APIENTRY glUniform3uiv(GLint location, GLsizei count, const GLuint *value)
{
return gl::Uniform3uiv(location, count, value);
}
-void GL_APIENTRY glUniform4uiv(GLint location, GLsizei count, const GLuint* value)
+void GL_APIENTRY glUniform4uiv(GLint location, GLsizei count, const GLuint *value)
{
return gl::Uniform4uiv(location, count, value);
}
-void GL_APIENTRY glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint* value)
+void GL_APIENTRY glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value)
{
return gl::ClearBufferiv(buffer, drawbuffer, value);
}
-void GL_APIENTRY glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint* value)
+void GL_APIENTRY glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value)
{
return gl::ClearBufferuiv(buffer, drawbuffer, value);
}
-void GL_APIENTRY glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat* value)
+void GL_APIENTRY glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value)
{
return gl::ClearBufferfv(buffer, drawbuffer, value);
}
@@ -1025,59 +1241,87 @@ void GL_APIENTRY glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth,
return gl::ClearBufferfi(buffer, drawbuffer, depth, stencil);
}
-const GLubyte* GL_APIENTRY glGetStringi(GLenum name, GLuint index)
+const GLubyte *GL_APIENTRY glGetStringi(GLenum name, GLuint index)
{
return gl::GetStringi(name, index);
}
-void GL_APIENTRY glCopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)
+void GL_APIENTRY glCopyBufferSubData(GLenum readTarget,
+ GLenum writeTarget,
+ GLintptr readOffset,
+ GLintptr writeOffset,
+ GLsizeiptr size)
{
return gl::CopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size);
}
-void GL_APIENTRY glGetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar* const* uniformNames, GLuint* uniformIndices)
+void GL_APIENTRY glGetUniformIndices(GLuint program,
+ GLsizei uniformCount,
+ const GLchar *const *uniformNames,
+ GLuint *uniformIndices)
{
return gl::GetUniformIndices(program, uniformCount, uniformNames, uniformIndices);
}
-void GL_APIENTRY glGetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params)
+void GL_APIENTRY glGetActiveUniformsiv(GLuint program,
+ GLsizei uniformCount,
+ const GLuint *uniformIndices,
+ GLenum pname,
+ GLint *params)
{
return gl::GetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params);
}
-GLuint GL_APIENTRY glGetUniformBlockIndex(GLuint program, const GLchar* uniformBlockName)
+GLuint GL_APIENTRY glGetUniformBlockIndex(GLuint program, const GLchar *uniformBlockName)
{
return gl::GetUniformBlockIndex(program, uniformBlockName);
}
-void GL_APIENTRY glGetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params)
+void GL_APIENTRY glGetActiveUniformBlockiv(GLuint program,
+ GLuint uniformBlockIndex,
+ GLenum pname,
+ GLint *params)
{
return gl::GetActiveUniformBlockiv(program, uniformBlockIndex, pname, params);
}
-void GL_APIENTRY glGetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName)
+void GL_APIENTRY glGetActiveUniformBlockName(GLuint program,
+ GLuint uniformBlockIndex,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLchar *uniformBlockName)
{
- return gl::GetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName);
+ return gl::GetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length,
+ uniformBlockName);
}
-void GL_APIENTRY glUniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)
+void GL_APIENTRY glUniformBlockBinding(GLuint program,
+ GLuint uniformBlockIndex,
+ GLuint uniformBlockBinding)
{
return gl::UniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding);
}
-void GL_APIENTRY glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount)
+void GL_APIENTRY glDrawArraysInstanced(GLenum mode,
+ GLint first,
+ GLsizei count,
+ GLsizei instanceCount)
{
return gl::DrawArraysInstanced(mode, first, count, instanceCount);
}
-void GL_APIENTRY glDrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices, GLsizei instanceCount)
+void GL_APIENTRY glDrawElementsInstanced(GLenum mode,
+ GLsizei count,
+ GLenum type,
+ const void *indices,
+ GLsizei instanceCount)
{
return gl::DrawElementsInstanced(mode, count, type, indices, instanceCount);
}
GLsync GL_APIENTRY glFenceSync(GLenum condition, GLbitfield flags)
{
- return gl::FenceSync_(condition, flags);
+ return gl::FenceSync(condition, flags);
}
GLboolean GL_APIENTRY glIsSync(GLsync sync)
@@ -1100,32 +1344,33 @@ void GL_APIENTRY glWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
return gl::WaitSync(sync, flags, timeout);
}
-void GL_APIENTRY glGetInteger64v(GLenum pname, GLint64* params)
+void GL_APIENTRY glGetInteger64v(GLenum pname, GLint64 *params)
{
return gl::GetInteger64v(pname, params);
}
-void GL_APIENTRY glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values)
+void GL_APIENTRY
+glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values)
{
return gl::GetSynciv(sync, pname, bufSize, length, values);
}
-void GL_APIENTRY glGetInteger64i_v(GLenum target, GLuint index, GLint64* data)
+void GL_APIENTRY glGetInteger64i_v(GLenum target, GLuint index, GLint64 *data)
{
return gl::GetInteger64i_v(target, index, data);
}
-void GL_APIENTRY glGetBufferParameteri64v(GLenum target, GLenum pname, GLint64* params)
+void GL_APIENTRY glGetBufferParameteri64v(GLenum target, GLenum pname, GLint64 *params)
{
return gl::GetBufferParameteri64v(target, pname, params);
}
-void GL_APIENTRY glGenSamplers(GLsizei count, GLuint* samplers)
+void GL_APIENTRY glGenSamplers(GLsizei count, GLuint *samplers)
{
return gl::GenSamplers(count, samplers);
}
-void GL_APIENTRY glDeleteSamplers(GLsizei count, const GLuint* samplers)
+void GL_APIENTRY glDeleteSamplers(GLsizei count, const GLuint *samplers)
{
return gl::DeleteSamplers(count, samplers);
}
@@ -1145,7 +1390,7 @@ void GL_APIENTRY glSamplerParameteri(GLuint sampler, GLenum pname, GLint param)
return gl::SamplerParameteri(sampler, pname, param);
}
-void GL_APIENTRY glSamplerParameteriv(GLuint sampler, GLenum pname, const GLint* param)
+void GL_APIENTRY glSamplerParameteriv(GLuint sampler, GLenum pname, const GLint *param)
{
return gl::SamplerParameteriv(sampler, pname, param);
}
@@ -1155,17 +1400,17 @@ void GL_APIENTRY glSamplerParameterf(GLuint sampler, GLenum pname, GLfloat param
return gl::SamplerParameterf(sampler, pname, param);
}
-void GL_APIENTRY glSamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat* param)
+void GL_APIENTRY glSamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat *param)
{
return gl::SamplerParameterfv(sampler, pname, param);
}
-void GL_APIENTRY glGetSamplerParameteriv(GLuint sampler, GLenum pname, GLint* params)
+void GL_APIENTRY glGetSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params)
{
return gl::GetSamplerParameteriv(sampler, pname, params);
}
-void GL_APIENTRY glGetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat* params)
+void GL_APIENTRY glGetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat *params)
{
return gl::GetSamplerParameterfv(sampler, pname, params);
}
@@ -1180,12 +1425,12 @@ void GL_APIENTRY glBindTransformFeedback(GLenum target, GLuint id)
return gl::BindTransformFeedback(target, id);
}
-void GL_APIENTRY glDeleteTransformFeedbacks(GLsizei n, const GLuint* ids)
+void GL_APIENTRY glDeleteTransformFeedbacks(GLsizei n, const GLuint *ids)
{
return gl::DeleteTransformFeedbacks(n, ids);
}
-void GL_APIENTRY glGenTransformFeedbacks(GLsizei n, GLuint* ids)
+void GL_APIENTRY glGenTransformFeedbacks(GLsizei n, GLuint *ids)
{
return gl::GenTransformFeedbacks(n, ids);
}
@@ -1205,12 +1450,19 @@ void GL_APIENTRY glResumeTransformFeedback(void)
return gl::ResumeTransformFeedback();
}
-void GL_APIENTRY glGetProgramBinary(GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary)
+void GL_APIENTRY glGetProgramBinary(GLuint program,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLenum *binaryFormat,
+ void *binary)
{
return gl::GetProgramBinary(program, bufSize, length, binaryFormat, binary);
}
-void GL_APIENTRY glProgramBinary(GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length)
+void GL_APIENTRY glProgramBinary(GLuint program,
+ GLenum binaryFormat,
+ const void *binary,
+ GLsizei length)
{
return gl::ProgramBinary(program, binaryFormat, binary, length);
}
@@ -1220,52 +1472,86 @@ void GL_APIENTRY glProgramParameteri(GLuint program, GLenum pname, GLint value)
return gl::ProgramParameteri(program, pname, value);
}
-void GL_APIENTRY glInvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments)
+void GL_APIENTRY glInvalidateFramebuffer(GLenum target,
+ GLsizei numAttachments,
+ const GLenum *attachments)
{
return gl::InvalidateFramebuffer(target, numAttachments, attachments);
}
-void GL_APIENTRY glInvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height)
+void GL_APIENTRY glInvalidateSubFramebuffer(GLenum target,
+ GLsizei numAttachments,
+ const GLenum *attachments,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height)
{
return gl::InvalidateSubFramebuffer(target, numAttachments, attachments, x, y, width, height);
}
-void GL_APIENTRY glTexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
+void GL_APIENTRY
+glTexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
{
return gl::TexStorage2D(target, levels, internalformat, width, height);
}
-void GL_APIENTRY glTexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)
+void GL_APIENTRY glTexStorage3D(GLenum target,
+ GLsizei levels,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth)
{
return gl::TexStorage3D(target, levels, internalformat, width, height, depth);
}
-void GL_APIENTRY glGetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params)
+void GL_APIENTRY glGetInternalformativ(GLenum target,
+ GLenum internalformat,
+ GLenum pname,
+ GLsizei bufSize,
+ GLint *params)
{
return gl::GetInternalformativ(target, internalformat, pname, bufSize, params);
}
-void GL_APIENTRY glBlitFramebufferANGLE(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
+void GL_APIENTRY glBlitFramebufferANGLE(GLint srcX0,
+ GLint srcY0,
+ GLint srcX1,
+ GLint srcY1,
+ GLint dstX0,
+ GLint dstY0,
+ GLint dstX1,
+ GLint dstY1,
+ GLbitfield mask,
+ GLenum filter)
{
- return gl::BlitFramebufferANGLE(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
+ return gl::BlitFramebufferANGLE(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask,
+ filter);
}
-void GL_APIENTRY glRenderbufferStorageMultisampleANGLE(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
+void GL_APIENTRY glRenderbufferStorageMultisampleANGLE(GLenum target,
+ GLsizei samples,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height)
{
return gl::RenderbufferStorageMultisampleANGLE(target, samples, internalformat, width, height);
}
-void GL_APIENTRY glDiscardFramebufferEXT(GLenum target, GLsizei numAttachments, const GLenum *attachments)
+void GL_APIENTRY glDiscardFramebufferEXT(GLenum target,
+ GLsizei numAttachments,
+ const GLenum *attachments)
{
return gl::DiscardFramebufferEXT(target, numAttachments, attachments);
}
-void GL_APIENTRY glDeleteFencesNV(GLsizei n, const GLuint* fences)
+void GL_APIENTRY glDeleteFencesNV(GLsizei n, const GLuint *fences)
{
return gl::DeleteFencesNV(n, fences);
}
-void GL_APIENTRY glGenFencesNV(GLsizei n, GLuint* fences)
+void GL_APIENTRY glGenFencesNV(GLsizei n, GLuint *fences)
{
return gl::GenFencesNV(n, fences);
}
@@ -1295,12 +1581,19 @@ void GL_APIENTRY glSetFenceNV(GLuint fence, GLenum condition)
return gl::SetFenceNV(fence, condition);
}
-void GL_APIENTRY glGetTranslatedShaderSourceANGLE(GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source)
+void GL_APIENTRY glGetTranslatedShaderSourceANGLE(GLuint shader,
+ GLsizei bufsize,
+ GLsizei *length,
+ GLchar *source)
{
return gl::GetTranslatedShaderSourceANGLE(shader, bufsize, length, source);
}
-void GL_APIENTRY glTexStorage2DEXT(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
+void GL_APIENTRY glTexStorage2DEXT(GLenum target,
+ GLsizei levels,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height)
{
return gl::TexStorage2DEXT(target, levels, internalformat, width, height);
}
@@ -1310,7 +1603,14 @@ GLenum GL_APIENTRY glGetGraphicsResetStatusEXT(void)
return gl::GetGraphicsResetStatusEXT();
}
-void GL_APIENTRY glReadnPixelsEXT(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data)
+void GL_APIENTRY glReadnPixelsEXT(GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ GLsizei bufSize,
+ void *data)
{
return gl::ReadnPixelsEXT(x, y, width, height, format, type, bufSize, data);
}
@@ -1385,12 +1685,19 @@ void GL_APIENTRY glDrawBuffersEXT(GLsizei n, const GLenum *bufs)
return gl::DrawBuffersEXT(n, bufs);
}
-void GL_APIENTRY glDrawArraysInstancedANGLE(GLenum mode, GLint first, GLsizei count, GLsizei primcount)
+void GL_APIENTRY glDrawArraysInstancedANGLE(GLenum mode,
+ GLint first,
+ GLsizei count,
+ GLsizei primcount)
{
return gl::DrawArraysInstancedANGLE(mode, first, count, primcount);
}
-void GL_APIENTRY glDrawElementsInstancedANGLE(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount)
+void GL_APIENTRY glDrawElementsInstancedANGLE(GLenum mode,
+ GLsizei count,
+ GLenum type,
+ const void *indices,
+ GLsizei primcount)
{
return gl::DrawElementsInstancedANGLE(mode, count, type, indices, primcount);
}
@@ -1400,17 +1707,24 @@ void GL_APIENTRY glVertexAttribDivisorANGLE(GLuint index, GLuint divisor)
return gl::VertexAttribDivisorANGLE(index, divisor);
}
-void GL_APIENTRY glGetProgramBinaryOES(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary)
+void GL_APIENTRY glGetProgramBinaryOES(GLuint program,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLenum *binaryFormat,
+ void *binary)
{
return gl::GetProgramBinaryOES(program, bufSize, length, binaryFormat, binary);
}
-void GL_APIENTRY glProgramBinaryOES(GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length)
+void GL_APIENTRY glProgramBinaryOES(GLuint program,
+ GLenum binaryFormat,
+ const void *binary,
+ GLint length)
{
return gl::ProgramBinaryOES(program, binaryFormat, binary, length);
}
-void* GL_APIENTRY glMapBufferOES(GLenum target, GLenum access)
+void *GL_APIENTRY glMapBufferOES(GLenum target, GLenum access)
{
return gl::MapBufferOES(target, access);
}
@@ -1420,12 +1734,15 @@ GLboolean GL_APIENTRY glUnmapBufferOES(GLenum target)
return gl::UnmapBufferOES(target);
}
-void GL_APIENTRY glGetBufferPointervOES(GLenum target, GLenum pname, GLvoid **params)
+void GL_APIENTRY glGetBufferPointervOES(GLenum target, GLenum pname, void **params)
{
return gl::GetBufferPointervOES(target, pname, params);
}
-void* GL_APIENTRY glMapBufferRangeEXT(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
+void *GL_APIENTRY glMapBufferRangeEXT(GLenum target,
+ GLintptr offset,
+ GLsizeiptr length,
+ GLbitfield access)
{
return gl::MapBufferRangeEXT(target, offset, length, access);
}
@@ -1562,4 +1879,697 @@ void GL_APIENTRY glGetPointervKHR(GLenum pname, void **params)
{
return gl::GetPointervKHR(pname, params);
}
+
+void GL_APIENTRY glBindUniformLocationCHROMIUM(GLuint program, GLint location, const GLchar *name)
+{
+ return gl::BindUniformLocationCHROMIUM(program, location, name);
+}
+
+void GL_APIENTRY glCoverageModulationCHROMIUM(GLenum components)
+{
+ return gl::CoverageModulationCHROMIUM(components);
+}
+
+// CHROMIUM_path_rendendering
+void GL_APIENTRY glMatrixLoadfCHROMIUM(GLenum matrixMode, const GLfloat *matrix)
+{
+ gl::MatrixLoadfCHROMIUM(matrixMode, matrix);
+}
+
+void GL_APIENTRY glMatrixLoadIdentityCHROMIUM(GLenum matrixMode)
+{
+ gl::MatrixLoadIdentityCHROMIUM(matrixMode);
+}
+
+GLuint GL_APIENTRY glGenPathsCHROMIUM(GLsizei range)
+{
+ return gl::GenPathsCHROMIUM(range);
+}
+
+void GL_APIENTRY glDeletePathsCHROMIUM(GLuint first, GLsizei range)
+{
+ gl::DeletePathsCHROMIUM(first, range);
+}
+
+GLboolean GL_APIENTRY glIsPathCHROMIUM(GLuint path)
+{
+ return gl::IsPathCHROMIUM(path);
+}
+
+void GL_APIENTRY glPathCommandsCHROMIUM(GLuint path,
+ GLsizei numCommands,
+ const GLubyte *commands,
+ GLsizei numCoords,
+ GLenum coordType,
+ const void *coords)
+{
+ gl::PathCommandsCHROMIUM(path, numCommands, commands, numCoords, coordType, coords);
+}
+
+void GL_APIENTRY glPathParameterfCHROMIUM(GLuint path, GLenum pname, GLfloat value)
+{
+ gl::PathParameterfCHROMIUM(path, pname, value);
+}
+
+void GL_APIENTRY glPathParameteriCHROMIUM(GLuint path, GLenum pname, GLint value)
+{
+ gl::PathParameteriCHROMIUM(path, pname, value);
+}
+
+void GL_APIENTRY glGetPathParameterfvCHROMIUM(GLuint path, GLenum pname, GLfloat *value)
+{
+ gl::GetPathParameterfCHROMIUM(path, pname, value);
+}
+
+void GL_APIENTRY glGetPathParameterivCHROMIUM(GLuint path, GLenum pname, GLint *value)
+{
+ gl::GetPathParameteriCHROMIUM(path, pname, value);
+}
+
+void GL_APIENTRY glPathStencilFuncCHROMIUM(GLenum func, GLint ref, GLuint mask)
+{
+ gl::PathStencilFuncCHROMIUM(func, ref, mask);
+}
+
+void GL_APIENTRY glStencilFillPathCHROMIUM(GLuint path, GLenum fillMode, GLuint mask)
+{
+ gl::StencilFillPathCHROMIUM(path, fillMode, mask);
+}
+
+void GL_APIENTRY glStencilStrokePathCHROMIUM(GLuint path, GLint reference, GLuint mask)
+{
+ gl::StencilStrokePathCHROMIUM(path, reference, mask);
+}
+
+void GL_APIENTRY glCoverFillPathCHROMIUM(GLuint path, GLenum coverMode)
+{
+ gl::CoverFillPathCHROMIUM(path, coverMode);
+}
+
+void GL_APIENTRY glCoverStrokePathCHROMIUM(GLuint path, GLenum coverMode)
+{
+ gl::CoverStrokePathCHROMIUM(path, coverMode);
+}
+
+void GL_APIENTRY glStencilThenCoverFillPathCHROMIUM(GLuint path,
+ GLenum fillMode,
+ GLuint mask,
+ GLenum coverMode)
+{
+ gl::StencilThenCoverFillPathCHROMIUM(path, fillMode, mask, coverMode);
+}
+
+void GL_APIENTRY glStencilThenCoverStrokePathCHROMIUM(GLuint path,
+ GLint reference,
+ GLuint mask,
+ GLenum coverMode)
+{
+ gl::StencilThenCoverStrokePathCHROMIUM(path, reference, mask, coverMode);
+}
+
+void GL_APIENTRY glCoverFillPathInstancedCHROMIUM(GLsizei numPaths,
+ GLenum pathNameType,
+ const void *paths,
+ GLuint pathBase,
+ GLenum coverMode,
+ GLenum transformType,
+ const GLfloat *transformValues)
+{
+ gl::CoverFillPathInstancedCHROMIUM(numPaths, pathNameType, paths, pathBase, coverMode,
+ transformType, transformValues);
+}
+
+void GL_APIENTRY glCoverStrokePathInstancedCHROMIUM(GLsizei numPaths,
+ GLenum pathNameType,
+ const void *paths,
+ GLuint pathBase,
+ GLenum coverMode,
+ GLenum transformType,
+ const GLfloat *transformValues)
+{
+ gl::CoverStrokePathInstancedCHROMIUM(numPaths, pathNameType, paths, pathBase, coverMode,
+ transformType, transformValues);
+}
+
+void GL_APIENTRY glStencilFillPathInstancedCHROMIUM(GLsizei numPaths,
+ GLenum pathNameType,
+ const void *paths,
+ GLuint pathBase,
+ GLenum fillMode,
+ GLuint mask,
+ GLenum transformType,
+ const GLfloat *transformValues)
+{
+ gl::StencilFillPathInstancedCHROMIUM(numPaths, pathNameType, paths, pathBase, fillMode, mask,
+ transformType, transformValues);
+}
+
+void GL_APIENTRY glStencilStrokePathInstancedCHROMIUM(GLsizei numPaths,
+ GLenum pathNameType,
+ const void *paths,
+ GLuint pathBase,
+ GLint reference,
+ GLuint mask,
+ GLenum transformType,
+ const GLfloat *transformValues)
+{
+ gl::StencilStrokePathInstancedCHROMIUM(numPaths, pathNameType, paths, pathBase, reference, mask,
+ transformType, transformValues);
+}
+
+void GL_APIENTRY glStencilThenCoverFillPathInstancedCHROMIUM(GLsizei numPaths,
+ GLenum pathNameType,
+ const void *paths,
+ GLuint pathBase,
+ GLenum fillMode,
+ GLuint mask,
+ GLenum coverMode,
+ GLenum transformType,
+ const GLfloat *transformValues)
+{
+ gl::StencilThenCoverFillPathInstancedCHROMIUM(numPaths, pathNameType, paths, pathBase, fillMode,
+ mask, coverMode, transformType, transformValues);
+}
+
+void GL_APIENTRY glStencilThenCoverStrokePathInstancedCHROMIUM(GLsizei numPaths,
+ GLenum pathNameType,
+ const void *paths,
+ GLuint pathBase,
+ GLint reference,
+ GLuint mask,
+ GLenum coverMode,
+ GLenum transformType,
+ const GLfloat *transformValues)
+{
+ gl::StencilThenCoverStrokePathInstancedCHROMIUM(numPaths, pathNameType, paths, pathBase,
+ reference, mask, coverMode, transformType,
+ transformValues);
+}
+
+void GL_APIENTRY glBindFragmentInputLocationCHROMIUM(GLuint program,
+ GLint location,
+ const GLchar *name)
+{
+ gl::BindFragmentInputLocationCHROMIUM(program, location, name);
+}
+
+void GL_APIENTRY glProgramPathFragmentInputGenCHROMIUM(GLuint program,
+ GLint location,
+ GLenum genMode,
+ GLint components,
+ const GLfloat *coeffs)
+{
+ gl::ProgramPathFragmentInputGenCHROMIUM(program, location, genMode, components, coeffs);
+}
+
+// GLES 3.1
+void GL_APIENTRY glDispatchCompute(GLuint numGroupsX, GLuint numGroupsY, GLuint numGroupsZ)
+{
+ gl::DispatchCompute(numGroupsX, numGroupsY, numGroupsZ);
+}
+
+void GL_APIENTRY glDispatchComputeIndirect(GLintptr indirect)
+{
+ gl::DispatchComputeIndirect(indirect);
+}
+
+void GL_APIENTRY glDrawArraysIndirect(GLenum mode, const void *indirect)
+{
+ gl::DrawArraysIndirect(mode, indirect);
+}
+
+void GL_APIENTRY glDrawElementsIndirect(GLenum mode, GLenum type, const void *indirect)
+{
+ gl::DrawElementsIndirect(mode, type, indirect);
+}
+
+void GL_APIENTRY glFramebufferParameteri(GLenum target, GLenum pname, GLint param)
+{
+ gl::FramebufferParameteri(target, pname, param);
+}
+
+void GL_APIENTRY glGetFramebufferParameteriv(GLenum target, GLenum pname, GLint *params)
+{
+ gl::GetFramebufferParameteriv(target, pname, params);
+}
+
+void GL_APIENTRY glGetProgramInterfaceiv(GLuint program,
+ GLenum programInterface,
+ GLenum pname,
+ GLint *params)
+{
+ gl::GetProgramInterfaceiv(program, programInterface, pname, params);
+}
+
+GLuint GL_APIENTRY glGetProgramResourceIndex(GLuint program,
+ GLenum programInterface,
+ const GLchar *name)
+{
+ return gl::GetProgramResourceIndex(program, programInterface, name);
+}
+
+void GL_APIENTRY glGetProgramResourceName(GLuint program,
+ GLenum programInterface,
+ GLuint index,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLchar *name)
+{
+ gl::GetProgramResourceName(program, programInterface, index, bufSize, length, name);
+}
+
+void GL_APIENTRY glGetProgramResourceiv(GLuint program,
+ GLenum programInterface,
+ GLuint index,
+ GLsizei propCount,
+ const GLenum *props,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *params)
+{
+ gl::GetProgramResourceiv(program, programInterface, index, propCount, props, bufSize, length,
+ params);
+}
+
+GLint GL_APIENTRY glGetProgramResourceLocation(GLuint program,
+ GLenum programInterface,
+ const GLchar *name)
+{
+ return gl::GetProgramResourceLocation(program, programInterface, name);
+}
+
+void GL_APIENTRY glUseProgramStages(GLuint pipeline, GLbitfield stages, GLuint program)
+{
+ gl::UseProgramStages(pipeline, stages, program);
+}
+
+void GL_APIENTRY glActiveShaderProgram(GLuint pipeline, GLuint program)
+{
+ gl::ActiveShaderProgram(pipeline, program);
+}
+
+GLuint GL_APIENTRY glCreateShaderProgramv(GLenum type, GLsizei count, const GLchar *const *strings)
+{
+ return gl::CreateShaderProgramv(type, count, strings);
+}
+
+void GL_APIENTRY glBindProgramPipeline(GLuint pipeline)
+{
+ gl::BindProgramPipeline(pipeline);
+}
+
+void GL_APIENTRY glDeleteProgramPipelines(GLsizei n, const GLuint *pipelines)
+{
+ gl::DeleteProgramPipelines(n, pipelines);
+}
+
+void GL_APIENTRY glGenProgramPipelines(GLsizei n, GLuint *pipelines)
+{
+ gl::GenProgramPipelines(n, pipelines);
+}
+
+GLboolean GL_APIENTRY glIsProgramPipeline(GLuint pipeline)
+{
+ return gl::IsProgramPipeline(pipeline);
+}
+
+void GL_APIENTRY glGetProgramPipelineiv(GLuint pipeline, GLenum pname, GLint *params)
+{
+ gl::GetProgramPipelineiv(pipeline, pname, params);
+}
+
+void GL_APIENTRY glProgramUniform1i(GLuint program, GLint location, GLint v0)
+{
+ gl::ProgramUniform1i(program, location, v0);
+}
+
+void GL_APIENTRY glProgramUniform2i(GLuint program, GLint location, GLint v0, GLint v1)
+{
+ gl::ProgramUniform2i(program, location, v0, v1);
}
+
+void GL_APIENTRY glProgramUniform3i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2)
+{
+ gl::ProgramUniform3i(program, location, v0, v1, v2);
+}
+
+void GL_APIENTRY
+glProgramUniform4i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
+{
+ gl::ProgramUniform4i(program, location, v0, v1, v2, v3);
+}
+
+void GL_APIENTRY glProgramUniform1ui(GLuint program, GLint location, GLuint v0)
+{
+ gl::ProgramUniform1ui(program, location, v0);
+}
+
+void GL_APIENTRY glProgramUniform2ui(GLuint program, GLint location, GLuint v0, GLuint v1)
+{
+ gl::ProgramUniform2ui(program, location, v0, v1);
+}
+
+void GL_APIENTRY
+glProgramUniform3ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2)
+{
+ gl::ProgramUniform3ui(program, location, v0, v1, v2);
+}
+
+void GL_APIENTRY
+glProgramUniform4ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
+{
+ gl::ProgramUniform4ui(program, location, v0, v1, v2, v3);
+}
+
+void GL_APIENTRY glProgramUniform1f(GLuint program, GLint location, GLfloat v0)
+{
+ gl::ProgramUniform1f(program, location, v0);
+}
+
+void GL_APIENTRY glProgramUniform2f(GLuint program, GLint location, GLfloat v0, GLfloat v1)
+{
+ gl::ProgramUniform2f(program, location, v0, v1);
+}
+
+void GL_APIENTRY
+glProgramUniform3f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
+{
+ gl::ProgramUniform3f(program, location, v0, v1, v2);
+}
+
+void GL_APIENTRY
+glProgramUniform4f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
+{
+ gl::ProgramUniform4f(program, location, v0, v1, v2, v3);
+}
+
+void GL_APIENTRY glProgramUniform1iv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLint *value)
+{
+ gl::ProgramUniform1iv(program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniform2iv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLint *value)
+{
+ gl::ProgramUniform2iv(program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniform3iv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLint *value)
+{
+ gl::ProgramUniform3iv(program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniform4iv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLint *value)
+{
+ gl::ProgramUniform4iv(program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniform1uiv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLuint *value)
+{
+ gl::ProgramUniform1uiv(program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniform2uiv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLuint *value)
+{
+ gl::ProgramUniform2uiv(program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniform3uiv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLuint *value)
+{
+ gl::ProgramUniform3uiv(program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniform4uiv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLuint *value)
+{
+ gl::ProgramUniform4uiv(program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniform1fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLfloat *value)
+{
+ gl::ProgramUniform1fv(program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniform2fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLfloat *value)
+{
+ gl::ProgramUniform2fv(program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniform3fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLfloat *value)
+{
+ gl::ProgramUniform3fv(program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniform4fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ const GLfloat *value)
+{
+ gl::ProgramUniform4fv(program, location, count, value);
+}
+
+void GL_APIENTRY glProgramUniformMatrix2fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
+{
+ gl::ProgramUniformMatrix2fv(program, location, count, transpose, value);
+}
+
+void GL_APIENTRY glProgramUniformMatrix3fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
+{
+ gl::ProgramUniformMatrix3fv(program, location, count, transpose, value);
+}
+
+void GL_APIENTRY glProgramUniformMatrix4fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
+{
+ gl::ProgramUniformMatrix4fv(program, location, count, transpose, value);
+}
+
+void GL_APIENTRY glProgramUniformMatrix2x3fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
+{
+ gl::ProgramUniformMatrix2x3fv(program, location, count, transpose, value);
+}
+
+void GL_APIENTRY glProgramUniformMatrix3x2fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
+{
+ gl::ProgramUniformMatrix3x2fv(program, location, count, transpose, value);
+}
+
+void GL_APIENTRY glProgramUniformMatrix2x4fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
+{
+ gl::ProgramUniformMatrix2x4fv(program, location, count, transpose, value);
+}
+
+void GL_APIENTRY glProgramUniformMatrix4x2fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
+{
+ gl::ProgramUniformMatrix4x2fv(program, location, count, transpose, value);
+}
+
+void GL_APIENTRY glProgramUniformMatrix3x4fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
+{
+ gl::ProgramUniformMatrix3x4fv(program, location, count, transpose, value);
+}
+
+void GL_APIENTRY glProgramUniformMatrix4x3fv(GLuint program,
+ GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat *value)
+{
+ gl::ProgramUniformMatrix4x3fv(program, location, count, transpose, value);
+}
+
+void GL_APIENTRY glValidateProgramPipeline(GLuint pipeline)
+{
+ gl::ValidateProgramPipeline(pipeline);
+}
+
+void GL_APIENTRY glGetProgramPipelineInfoLog(GLuint pipeline,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLchar *infoLog)
+{
+ gl::GetProgramPipelineInfoLog(pipeline, bufSize, length, infoLog);
+}
+
+void GL_APIENTRY glBindImageTexture(GLuint unit,
+ GLuint texture,
+ GLint level,
+ GLboolean layered,
+ GLint layer,
+ GLenum access,
+ GLenum format)
+{
+ gl::BindImageTexture(unit, texture, level, layered, layer, access, format);
+}
+
+void GL_APIENTRY glGetBooleani_v(GLenum target, GLuint index, GLboolean *data)
+{
+ gl::GetBooleani_v(target, index, data);
+}
+
+void GL_APIENTRY glMemoryBarrier(GLbitfield barriers)
+{
+ gl::MemoryBarrier(barriers);
+}
+
+void GL_APIENTRY glMemoryBarrierByRegion(GLbitfield barriers)
+{
+ gl::MemoryBarrierByRegion(barriers);
+}
+
+void GL_APIENTRY glTexStorage2DMultisample(GLenum target,
+ GLsizei samples,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLboolean fixedsamplelocations)
+{
+ gl::TexStorage2DMultisample(target, samples, internalformat, width, height,
+ fixedsamplelocations);
+}
+
+void GL_APIENTRY glGetMultisamplefv(GLenum pname, GLuint index, GLfloat *val)
+{
+ gl::GetMultisamplefv(pname, index, val);
+}
+
+void GL_APIENTRY glSampleMaski(GLuint maskNumber, GLbitfield mask)
+{
+ gl::SampleMaski(maskNumber, mask);
+}
+
+void GL_APIENTRY glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params)
+{
+ gl::GetTexLevelParameteriv(target, level, pname, params);
+}
+
+void GL_APIENTRY glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params)
+{
+ gl::GetTexLevelParameterfv(target, level, pname, params);
+}
+
+void GL_APIENTRY glBindVertexBuffer(GLuint bindingindex,
+ GLuint buffer,
+ GLintptr offset,
+ GLsizei stride)
+{
+ gl::BindVertexBuffer(bindingindex, buffer, offset, stride);
+}
+
+void GL_APIENTRY glVertexAttribFormat(GLuint attribindex,
+ GLint size,
+ GLenum type,
+ GLboolean normalized,
+ GLuint relativeoffset)
+{
+ gl::VertexAttribFormat(attribindex, size, type, normalized, relativeoffset);
+}
+
+void GL_APIENTRY glVertexAttribIFormat(GLuint attribindex,
+ GLint size,
+ GLenum type,
+ GLuint relativeoffset)
+{
+ gl::VertexAttribIFormat(attribindex, size, type, relativeoffset);
+}
+
+void GL_APIENTRY glVertexAttribBinding(GLuint attribindex, GLuint bindingindex)
+{
+ gl::VertexAttribBinding(attribindex, bindingindex);
+}
+
+void GL_APIENTRY glVertexBindingDivisor(GLuint bindingindex, GLuint divisor)
+{
+ gl::VertexBindingDivisor(bindingindex, divisor);
+}
+
+void GL_APIENTRY glFramebufferTextureMultiviewLayeredANGLE(GLenum target,
+ GLenum attachment,
+ GLuint texture,
+ GLint level,
+ GLint baseViewIndex,
+ GLsizei numViews)
+{
+ gl::FramebufferTextureMultiviewLayeredANGLE(target, attachment, texture, level, baseViewIndex,
+ numViews);
+}
+
+void GL_APIENTRY glFramebufferTextureMultiviewSideBySideANGLE(GLenum target,
+ GLenum attachment,
+ GLuint texture,
+ GLint level,
+ GLsizei numViews,
+ const GLint *viewportOffsets)
+{
+ gl::FramebufferTextureMultiviewSideBySideANGLE(target, attachment, texture, level, numViews,
+ viewportOffsets);
+}
+
+void GL_APIENTRY glRequestExtensionANGLE(const GLchar *name)
+{
+ gl::RequestExtensionANGLE(name);
+}
+
+} // extern "C"
diff --git a/src/3rdparty/angle/src/libGLESv2/libGLESv2.def b/src/3rdparty/angle/src/libGLESv2/libGLESv2.def
index 0aebb6c864..2ff4cc0579 100644
--- a/src/3rdparty/angle/src/libGLESv2/libGLESv2.def
+++ b/src/3rdparty/angle/src/libGLESv2/libGLESv2.def
@@ -202,6 +202,38 @@ EXPORTS
glGetQueryObjectivEXT @315
glGetQueryObjecti64vEXT @316
glGetQueryObjectui64vEXT @317
+ glBindUniformLocationCHROMIUM @318
+ glCoverageModulationCHROMIUM @319
+
+ glMatrixLoadfCHROMIUM @320
+ glMatrixLoadIdentityCHROMIUM @321
+ glGenPathsCHROMIUM @322
+ glDeletePathsCHROMIUM @323
+ glIsPathCHROMIUM @324
+ glPathCommandsCHROMIUM @325
+ glPathParameterfCHROMIUM @326
+ glPathParameteriCHROMIUM @327
+ glGetPathParameterfvCHROMIUM @328
+ glGetPathParameterivCHROMIUM @329
+ glPathStencilFuncCHROMIUM @330
+ glStencilFillPathCHROMIUM @331
+ glStencilStrokePathCHROMIUM @332
+ glCoverFillPathCHROMIUM @333
+ glCoverStrokePathCHROMIUM @334
+ glStencilThenCoverFillPathCHROMIUM @335
+ glStencilThenCoverStrokePathCHROMIUM @336
+ glCoverFillPathInstancedCHROMIUM @337
+ glCoverStrokePathInstancedCHROMIUM @338
+ glStencilStrokePathInstancedCHROMIUM @339
+ glStencilFillPathInstancedCHROMIUM @340
+ glStencilThenCoverFillPathInstancedCHROMIUM @341
+ glStencilThenCoverStrokePathInstancedCHROMIUM @342
+ glBindFragmentInputLocationCHROMIUM @343
+ glProgramPathFragmentInputGenCHROMIUM @344
+
+ glFramebufferTextureMultiviewLayeredANGLE @413
+ glFramebufferTextureMultiviewSideBySideANGLE @414
+ glRequestExtensionANGLE @415
; GLES 3.0 Functions
glReadBuffer @180
@@ -309,7 +341,72 @@ EXPORTS
glTexStorage3D @282
glGetInternalformativ @283
- ; ANGLE Platform Implementation
- ANGLEPlatformCurrent @290
- ANGLEPlatformInitialize @291
- ANGLEPlatformShutdown @292
+ ; GLES 3.1 Functions
+ glDispatchCompute @345
+ glDispatchComputeIndirect @346
+ glDrawArraysIndirect @347
+ glDrawElementsIndirect @348
+ glFramebufferParameteri @349
+ glGetFramebufferParameteriv @350
+ glGetProgramInterfaceiv @351
+ glGetProgramResourceIndex @352
+ glGetProgramResourceName @353
+ glGetProgramResourceiv @354
+ glGetProgramResourceLocation @355
+ glUseProgramStages @356
+ glActiveShaderProgram @357
+ glCreateShaderProgramv @358
+ glBindProgramPipeline @359
+ glDeleteProgramPipelines @360
+ glGenProgramPipelines @361
+ glIsProgramPipeline @362
+ glGetProgramPipelineiv @363
+ glProgramUniform1i @364
+ glProgramUniform2i @365
+ glProgramUniform3i @366
+ glProgramUniform4i @367
+ glProgramUniform1ui @368
+ glProgramUniform2ui @369
+ glProgramUniform3ui @370
+ glProgramUniform4ui @371
+ glProgramUniform1f @372
+ glProgramUniform2f @373
+ glProgramUniform3f @374
+ glProgramUniform4f @375
+ glProgramUniform1iv @376
+ glProgramUniform2iv @377
+ glProgramUniform3iv @378
+ glProgramUniform4iv @379
+ glProgramUniform1uiv @380
+ glProgramUniform2uiv @381
+ glProgramUniform3uiv @382
+ glProgramUniform4uiv @383
+ glProgramUniform1fv @384
+ glProgramUniform2fv @385
+ glProgramUniform3fv @386
+ glProgramUniform4fv @387
+ glProgramUniformMatrix2fv @388
+ glProgramUniformMatrix3fv @389
+ glProgramUniformMatrix4fv @390
+ glProgramUniformMatrix2x3fv @391
+ glProgramUniformMatrix3x2fv @392
+ glProgramUniformMatrix2x4fv @393
+ glProgramUniformMatrix4x2fv @394
+ glProgramUniformMatrix3x4fv @395
+ glProgramUniformMatrix4x3fv @396
+ glValidateProgramPipeline @397
+ glGetProgramPipelineInfoLog @398
+ glBindImageTexture @399
+ glGetBooleani_v @400
+ glMemoryBarrier @401
+ glMemoryBarrierByRegion @402
+ glTexStorage2DMultisample @403
+ glGetMultisamplefv @404
+ glSampleMaski @405
+ glGetTexLevelParameteriv @406
+ glGetTexLevelParameterfv @407
+ glBindVertexBuffer @408
+ glVertexAttribFormat @409
+ glVertexAttribIFormat @410
+ glVertexAttribBinding @411
+ glVertexBindingDivisor @412
diff --git a/src/3rdparty/angle/src/libGLESv2/libGLESv2_mingw32.def b/src/3rdparty/angle/src/libGLESv2/libGLESv2_mingw32.def
index db17bb487b..2ff4cc0579 100644
--- a/src/3rdparty/angle/src/libGLESv2/libGLESv2_mingw32.def
+++ b/src/3rdparty/angle/src/libGLESv2/libGLESv2_mingw32.def
@@ -1,316 +1,412 @@
LIBRARY libGLESv2
EXPORTS
- glActiveTexture@4 @1
- glAttachShader@8 @2
- glBindAttribLocation@12 @3
- glBindBuffer@8 @4
- glBindFramebuffer@8 @5
- glBindRenderbuffer@8 @6
- glBindTexture@8 @7
- glBlendColor@16 @8
- glBlendEquation@4 @9
- glBlendEquationSeparate@8 @10
- glBlendFunc@8 @11
- glBlendFuncSeparate@16 @12
- glBufferData@16 @13
- glBufferSubData@16 @14
- glCheckFramebufferStatus@4 @15
- glClear@4 @16
- glClearColor@16 @17
- glClearDepthf@4 @18
- glClearStencil@4 @19
- glColorMask@16 @20
- glCompileShader@4 @21
- glCompressedTexImage2D@32 @22
- glCompressedTexSubImage2D@36 @23
- glCopyTexImage2D@32 @24
- glCopyTexSubImage2D@32 @25
- glCreateProgram@0 @26
- glCreateShader@4 @27
- glCullFace@4 @28
- glDeleteBuffers@8 @29
- glDeleteFramebuffers@8 @30
- glDeleteProgram@4 @32
- glDeleteRenderbuffers@8 @33
- glDeleteShader@4 @34
- glDeleteTextures@8 @31
- glDepthFunc@4 @36
- glDepthMask@4 @37
- glDepthRangef@8 @38
- glDetachShader@8 @35
- glDisable@4 @39
- glDisableVertexAttribArray@4 @40
- glDrawArrays@12 @41
- glDrawElements@16 @42
- glEnable@4 @43
- glEnableVertexAttribArray@4 @44
- glFinish@0 @45
- glFlush@0 @46
- glFramebufferRenderbuffer@16 @47
- glFramebufferTexture2D@20 @48
- glFrontFace@4 @49
- glGenBuffers@8 @50
- glGenFramebuffers@8 @52
- glGenRenderbuffers@8 @53
- glGenTextures@8 @54
- glGenerateMipmap@4 @51
- glGetActiveAttrib@28 @55
- glGetActiveUniform@28 @56
- glGetAttachedShaders@16 @57
- glGetAttribLocation@8 @58
- glGetBooleanv@8 @59
- glGetBufferParameteriv@12 @60
- glGetError@0 @61
- glGetFloatv@8 @62
- glGetFramebufferAttachmentParameteriv@16 @63
- glGetIntegerv@8 @64
- glGetProgramInfoLog@16 @66
- glGetProgramiv@12 @65
- glGetRenderbufferParameteriv@12 @67
- glGetShaderInfoLog@16 @69
- glGetShaderPrecisionFormat@16 @70
- glGetShaderSource@16 @71
- glGetShaderiv@12 @68
- glGetString@4 @72
- glGetTexParameterfv@12 @73
- glGetTexParameteriv@12 @74
- glGetUniformLocation@8 @77
- glGetUniformfv@12 @75
- glGetUniformiv@12 @76
- glGetVertexAttribPointerv@12 @80
- glGetVertexAttribfv@12 @78
- glGetVertexAttribiv@12 @79
- glHint@8 @81
- glIsBuffer@4 @82
- glIsEnabled@4 @83
- glIsFramebuffer@4 @84
- glIsProgram@4 @85
- glIsRenderbuffer@4 @86
- glIsShader@4 @87
- glIsTexture@4 @88
- glLineWidth@4 @89
- glLinkProgram@4 @90
- glPixelStorei@8 @91
- glPolygonOffset@8 @92
- glReadPixels@28 @93
- glReleaseShaderCompiler@0 @94
- glRenderbufferStorage@16 @95
- glSampleCoverage@8 @96
- glScissor@16 @97
- glShaderBinary@20 @98
- glShaderSource@16 @99
- glStencilFunc@12 @100
- glStencilFuncSeparate@16 @101
- glStencilMask@4 @102
- glStencilMaskSeparate@8 @103
- glStencilOp@12 @104
- glStencilOpSeparate@16 @105
- glTexImage2D@36 @106
- glTexParameterf@12 @107
- glTexParameterfv@12 @108
- glTexParameteri@12 @109
- glTexParameteriv@12 @110
- glTexSubImage2D@36 @111
- glUniform1f@8 @112
- glUniform1fv@12 @113
- glUniform1i@8 @114
- glUniform1iv@12 @115
- glUniform2f@12 @116
- glUniform2fv@12 @117
- glUniform2i@12 @118
- glUniform2iv@12 @119
- glUniform3f@16 @120
- glUniform3fv@12 @121
- glUniform3i@16 @122
- glUniform3iv@12 @123
- glUniform4f@20 @124
- glUniform4fv@12 @125
- glUniform4i@20 @126
- glUniform4iv@12 @127
- glUniformMatrix2fv@16 @128
- glUniformMatrix3fv@16 @129
- glUniformMatrix4fv@16 @130
- glUseProgram@4 @131
- glValidateProgram@4 @132
- glVertexAttrib1f@8 @133
- glVertexAttrib1fv@8 @134
- glVertexAttrib2f@12 @135
- glVertexAttrib2fv@8 @136
- glVertexAttrib3f@16 @137
- glVertexAttrib3fv@8 @138
- glVertexAttrib4f@20 @139
- glVertexAttrib4fv@8 @140
- glVertexAttribPointer@24 @141
- glViewport@16 @142
+ glActiveTexture @1
+ glAttachShader @2
+ glBindAttribLocation @3
+ glBindBuffer @4
+ glBindFramebuffer @5
+ glBindRenderbuffer @6
+ glBindTexture @7
+ glBlendColor @8
+ glBlendEquation @9
+ glBlendEquationSeparate @10
+ glBlendFunc @11
+ glBlendFuncSeparate @12
+ glBufferData @13
+ glBufferSubData @14
+ glCheckFramebufferStatus @15
+ glClear @16
+ glClearColor @17
+ glClearDepthf @18
+ glClearStencil @19
+ glColorMask @20
+ glCompileShader @21
+ glCompressedTexImage2D @22
+ glCompressedTexSubImage2D @23
+ glCopyTexImage2D @24
+ glCopyTexSubImage2D @25
+ glCreateProgram @26
+ glCreateShader @27
+ glCullFace @28
+ glDeleteBuffers @29
+ glDeleteFramebuffers @30
+ glDeleteProgram @32
+ glDeleteRenderbuffers @33
+ glDeleteShader @34
+ glDeleteTextures @31
+ glDepthFunc @36
+ glDepthMask @37
+ glDepthRangef @38
+ glDetachShader @35
+ glDisable @39
+ glDisableVertexAttribArray @40
+ glDrawArrays @41
+ glDrawElements @42
+ glEnable @43
+ glEnableVertexAttribArray @44
+ glFinish @45
+ glFlush @46
+ glFramebufferRenderbuffer @47
+ glFramebufferTexture2D @48
+ glFrontFace @49
+ glGenBuffers @50
+ glGenFramebuffers @52
+ glGenRenderbuffers @53
+ glGenTextures @54
+ glGenerateMipmap @51
+ glGetActiveAttrib @55
+ glGetActiveUniform @56
+ glGetAttachedShaders @57
+ glGetAttribLocation @58
+ glGetBooleanv @59
+ glGetBufferParameteriv @60
+ glGetError @61
+ glGetFloatv @62
+ glGetFramebufferAttachmentParameteriv @63
+ glGetIntegerv @64
+ glGetProgramInfoLog @66
+ glGetProgramiv @65
+ glGetRenderbufferParameteriv @67
+ glGetShaderInfoLog @69
+ glGetShaderPrecisionFormat @70
+ glGetShaderSource @71
+ glGetShaderiv @68
+ glGetString @72
+ glGetTexParameterfv @73
+ glGetTexParameteriv @74
+ glGetUniformLocation @77
+ glGetUniformfv @75
+ glGetUniformiv @76
+ glGetVertexAttribPointerv @80
+ glGetVertexAttribfv @78
+ glGetVertexAttribiv @79
+ glHint @81
+ glIsBuffer @82
+ glIsEnabled @83
+ glIsFramebuffer @84
+ glIsProgram @85
+ glIsRenderbuffer @86
+ glIsShader @87
+ glIsTexture @88
+ glLineWidth @89
+ glLinkProgram @90
+ glPixelStorei @91
+ glPolygonOffset @92
+ glReadPixels @93
+ glReleaseShaderCompiler @94
+ glRenderbufferStorage @95
+ glSampleCoverage @96
+ glScissor @97
+ glShaderBinary @98
+ glShaderSource @99
+ glStencilFunc @100
+ glStencilFuncSeparate @101
+ glStencilMask @102
+ glStencilMaskSeparate @103
+ glStencilOp @104
+ glStencilOpSeparate @105
+ glTexImage2D @106
+ glTexParameterf @107
+ glTexParameterfv @108
+ glTexParameteri @109
+ glTexParameteriv @110
+ glTexSubImage2D @111
+ glUniform1f @112
+ glUniform1fv @113
+ glUniform1i @114
+ glUniform1iv @115
+ glUniform2f @116
+ glUniform2fv @117
+ glUniform2i @118
+ glUniform2iv @119
+ glUniform3f @120
+ glUniform3fv @121
+ glUniform3i @122
+ glUniform3iv @123
+ glUniform4f @124
+ glUniform4fv @125
+ glUniform4i @126
+ glUniform4iv @127
+ glUniformMatrix2fv @128
+ glUniformMatrix3fv @129
+ glUniformMatrix4fv @130
+ glUseProgram @131
+ glValidateProgram @132
+ glVertexAttrib1f @133
+ glVertexAttrib1fv @134
+ glVertexAttrib2f @135
+ glVertexAttrib2fv @136
+ glVertexAttrib3f @137
+ glVertexAttrib3fv @138
+ glVertexAttrib4f @139
+ glVertexAttrib4fv @140
+ glVertexAttribPointer @141
+ glViewport @142
; Extensions
- glBlitFramebufferANGLE@40 @149
- glRenderbufferStorageMultisampleANGLE@20 @150
- glDeleteFencesNV@8 @151
- glFinishFenceNV@4 @152
- glGenFencesNV@8 @153
- glGetFenceivNV@12 @154
- glIsFenceNV@4 @155
- glSetFenceNV@8 @156
- glTestFenceNV@4 @157
- glGetTranslatedShaderSourceANGLE@16 @159
- glTexStorage2DEXT@20 @160
- glGetGraphicsResetStatusEXT@0 @161
- glReadnPixelsEXT@32 @162
- glGetnUniformfvEXT@16 @163
- glGetnUniformivEXT@16 @164
- glGenQueriesEXT@8 @165
- glDeleteQueriesEXT@8 @166
- glIsQueryEXT@4 @167
- glBeginQueryEXT@8 @168
- glEndQueryEXT@4 @169
- glGetQueryivEXT@12 @170
- glGetQueryObjectuivEXT@12 @171
- glVertexAttribDivisorANGLE@8 @172
- glDrawArraysInstancedANGLE@16 @173
- glDrawElementsInstancedANGLE@20 @174
- glProgramBinaryOES@16 @175
- glGetProgramBinaryOES@20 @176
- glDrawBuffersEXT@8 @179
- glMapBufferOES@8 @285
- glUnmapBufferOES@4 @286
- glGetBufferPointervOES@12 @287
- glMapBufferRangeEXT@16 @288
- glFlushMappedBufferRangeEXT@12 @289
- glDiscardFramebufferEXT@12 @293
- glInsertEventMarkerEXT@8 @294
- glPushGroupMarkerEXT@8 @295
- glPopGroupMarkerEXT@0 @296
- glEGLImageTargetTexture2DOES@8 @297
- glEGLImageTargetRenderbufferStorageOES@8 @298
- glBindVertexArrayOES@4 @299
- glDeleteVertexArraysOES@8 @300
- glGenVertexArraysOES@8 @301
- glIsVertexArrayOES@4 @302
- glDebugMessageControlKHR@24 @303
- glDebugMessageInsertKHR@24 @304
- glDebugMessageCallbackKHR@8 @305
- glGetDebugMessageLogKHR@32 @306
- glPushDebugGroupKHR@16 @307
- glPopDebugGroupKHR@0 @308
- glObjectLabelKHR@16 @309
- glGetObjectLabelKHR@20 @310
- glObjectPtrLabelKHR@12 @311
- glGetObjectPtrLabelKHR@16 @312
- glGetPointervKHR@8 @313
- glQueryCounterEXT@8 @314
- glGetQueryObjectivEXT@12 @315
- glGetQueryObjecti64vEXT@12 @316
- glGetQueryObjectui64vEXT@12 @317
+ glBlitFramebufferANGLE @149
+ glRenderbufferStorageMultisampleANGLE @150
+ glDeleteFencesNV @151
+ glFinishFenceNV @152
+ glGenFencesNV @153
+ glGetFenceivNV @154
+ glIsFenceNV @155
+ glSetFenceNV @156
+ glTestFenceNV @157
+ glGetTranslatedShaderSourceANGLE @159
+ glTexStorage2DEXT @160
+ glGetGraphicsResetStatusEXT @161
+ glReadnPixelsEXT @162
+ glGetnUniformfvEXT @163
+ glGetnUniformivEXT @164
+ glGenQueriesEXT @165
+ glDeleteQueriesEXT @166
+ glIsQueryEXT @167
+ glBeginQueryEXT @168
+ glEndQueryEXT @169
+ glGetQueryivEXT @170
+ glGetQueryObjectuivEXT @171
+ glVertexAttribDivisorANGLE @172
+ glDrawArraysInstancedANGLE @173
+ glDrawElementsInstancedANGLE @174
+ glProgramBinaryOES @175
+ glGetProgramBinaryOES @176
+ glDrawBuffersEXT @179
+ glMapBufferOES @285
+ glUnmapBufferOES @286
+ glGetBufferPointervOES @287
+ glMapBufferRangeEXT @288
+ glFlushMappedBufferRangeEXT @289
+ glDiscardFramebufferEXT @293
+ glInsertEventMarkerEXT @294
+ glPushGroupMarkerEXT @295
+ glPopGroupMarkerEXT @296
+ glEGLImageTargetTexture2DOES @297
+ glEGLImageTargetRenderbufferStorageOES @298
+ glBindVertexArrayOES @299
+ glDeleteVertexArraysOES @300
+ glGenVertexArraysOES @301
+ glIsVertexArrayOES @302
+ glDebugMessageControlKHR @303
+ glDebugMessageInsertKHR @304
+ glDebugMessageCallbackKHR @305
+ glGetDebugMessageLogKHR @306
+ glPushDebugGroupKHR @307
+ glPopDebugGroupKHR @308
+ glObjectLabelKHR @309
+ glGetObjectLabelKHR @310
+ glObjectPtrLabelKHR @311
+ glGetObjectPtrLabelKHR @312
+ glGetPointervKHR @313
+ glQueryCounterEXT @314
+ glGetQueryObjectivEXT @315
+ glGetQueryObjecti64vEXT @316
+ glGetQueryObjectui64vEXT @317
+ glBindUniformLocationCHROMIUM @318
+ glCoverageModulationCHROMIUM @319
+
+ glMatrixLoadfCHROMIUM @320
+ glMatrixLoadIdentityCHROMIUM @321
+ glGenPathsCHROMIUM @322
+ glDeletePathsCHROMIUM @323
+ glIsPathCHROMIUM @324
+ glPathCommandsCHROMIUM @325
+ glPathParameterfCHROMIUM @326
+ glPathParameteriCHROMIUM @327
+ glGetPathParameterfvCHROMIUM @328
+ glGetPathParameterivCHROMIUM @329
+ glPathStencilFuncCHROMIUM @330
+ glStencilFillPathCHROMIUM @331
+ glStencilStrokePathCHROMIUM @332
+ glCoverFillPathCHROMIUM @333
+ glCoverStrokePathCHROMIUM @334
+ glStencilThenCoverFillPathCHROMIUM @335
+ glStencilThenCoverStrokePathCHROMIUM @336
+ glCoverFillPathInstancedCHROMIUM @337
+ glCoverStrokePathInstancedCHROMIUM @338
+ glStencilStrokePathInstancedCHROMIUM @339
+ glStencilFillPathInstancedCHROMIUM @340
+ glStencilThenCoverFillPathInstancedCHROMIUM @341
+ glStencilThenCoverStrokePathInstancedCHROMIUM @342
+ glBindFragmentInputLocationCHROMIUM @343
+ glProgramPathFragmentInputGenCHROMIUM @344
+
+ glFramebufferTextureMultiviewLayeredANGLE @413
+ glFramebufferTextureMultiviewSideBySideANGLE @414
+ glRequestExtensionANGLE @415
; GLES 3.0 Functions
- glReadBuffer@4 @180
- glDrawRangeElements@24 @181
- glTexImage3D@40 @182
- glTexSubImage3D@44 @183
- glCopyTexSubImage3D@36 @184
- glCompressedTexImage3D@36 @185
- glCompressedTexSubImage3D@44 @186
- glGenQueries@8 @187
- glDeleteQueries@8 @188
- glIsQuery@4 @189
- glBeginQuery@8 @190
- glEndQuery@4 @191
- glGetQueryiv@12 @192
- glGetQueryObjectuiv@12 @193
- glUnmapBuffer@4 @194
- glGetBufferPointerv@12 @195
- glDrawBuffers@8 @196
- glUniformMatrix2x3fv@16 @197
- glUniformMatrix3x2fv@16 @198
- glUniformMatrix2x4fv@16 @199
- glUniformMatrix4x2fv@16 @200
- glUniformMatrix3x4fv@16 @201
- glUniformMatrix4x3fv@16 @202
- glBlitFramebuffer@40 @203
- glRenderbufferStorageMultisample@20 @204
- glFramebufferTextureLayer@20 @205
- glMapBufferRange@16 @206
- glFlushMappedBufferRange@12 @207
- glBindVertexArray@4 @208
- glDeleteVertexArrays@8 @209
- glGenVertexArrays@8 @210
- glIsVertexArray@4 @211
- glGetIntegeri_v@12 @212
- glBeginTransformFeedback@4 @213
- glEndTransformFeedback@0 @214
- glBindBufferRange@20 @215
- glBindBufferBase@12 @216
- glTransformFeedbackVaryings@16 @217
- glGetTransformFeedbackVarying@28 @218
- glVertexAttribIPointer@20 @219
- glGetVertexAttribIiv@12 @220
- glGetVertexAttribIuiv@12 @221
- glVertexAttribI4i@20 @222
- glVertexAttribI4ui@20 @223
- glVertexAttribI4iv@8 @224
- glVertexAttribI4uiv@8 @225
- glGetUniformuiv@12 @226
- glGetFragDataLocation@8 @227
- glUniform1ui@8 @228
- glUniform2ui@12 @229
- glUniform3ui@16 @230
- glUniform4ui@20 @231
- glUniform1uiv@12 @232
- glUniform2uiv@12 @233
- glUniform3uiv@12 @234
- glUniform4uiv@12 @235
- glClearBufferiv@12 @236
- glClearBufferuiv@12 @237
- glClearBufferfv@12 @238
- glClearBufferfi@16 @239
- glGetStringi@8 @240
- glCopyBufferSubData@20 @241
- glGetUniformIndices@16 @242
- glGetActiveUniformsiv@20 @243
- glGetUniformBlockIndex@8 @244
- glGetActiveUniformBlockiv@16 @245
- glGetActiveUniformBlockName@20 @246
- glUniformBlockBinding@12 @247
- glDrawArraysInstanced@16 @248
- glDrawElementsInstanced@20 @249
- glFenceSync@8 @250
- glIsSync@4 @251
- glDeleteSync@4 @252
- glClientWaitSync@16 @253
- glWaitSync@16 @254
- glGetInteger64v@8 @255
- glGetSynciv@20 @256
- glGetInteger64i_v@12 @257
- glGetBufferParameteri64v@12 @258
- glGenSamplers@8 @259
- glDeleteSamplers@8 @260
- glIsSampler@4 @261
- glBindSampler@8 @262
- glSamplerParameteri@12 @263
- glSamplerParameteriv@12 @264
- glSamplerParameterf@12 @265
- glSamplerParameterfv@12 @266
- glGetSamplerParameteriv@12 @267
- glGetSamplerParameterfv@12 @268
- glVertexAttribDivisor@8 @269
- glBindTransformFeedback@8 @270
- glDeleteTransformFeedbacks@8 @271
- glGenTransformFeedbacks@8 @272
- glIsTransformFeedback@4 @273
- glPauseTransformFeedback@0 @274
- glResumeTransformFeedback@0 @275
- glGetProgramBinary@20 @276
- glProgramBinary@16 @277
- glProgramParameteri@12 @278
- glInvalidateFramebuffer@12 @279
- glInvalidateSubFramebuffer@28 @280
- glTexStorage2D@20 @281
- glTexStorage3D@24 @282
- glGetInternalformativ@20 @283
+ glReadBuffer @180
+ glDrawRangeElements @181
+ glTexImage3D @182
+ glTexSubImage3D @183
+ glCopyTexSubImage3D @184
+ glCompressedTexImage3D @185
+ glCompressedTexSubImage3D @186
+ glGenQueries @187
+ glDeleteQueries @188
+ glIsQuery @189
+ glBeginQuery @190
+ glEndQuery @191
+ glGetQueryiv @192
+ glGetQueryObjectuiv @193
+ glUnmapBuffer @194
+ glGetBufferPointerv @195
+ glDrawBuffers @196
+ glUniformMatrix2x3fv @197
+ glUniformMatrix3x2fv @198
+ glUniformMatrix2x4fv @199
+ glUniformMatrix4x2fv @200
+ glUniformMatrix3x4fv @201
+ glUniformMatrix4x3fv @202
+ glBlitFramebuffer @203
+ glRenderbufferStorageMultisample @204
+ glFramebufferTextureLayer @205
+ glMapBufferRange @206
+ glFlushMappedBufferRange @207
+ glBindVertexArray @208
+ glDeleteVertexArrays @209
+ glGenVertexArrays @210
+ glIsVertexArray @211
+ glGetIntegeri_v @212
+ glBeginTransformFeedback @213
+ glEndTransformFeedback @214
+ glBindBufferRange @215
+ glBindBufferBase @216
+ glTransformFeedbackVaryings @217
+ glGetTransformFeedbackVarying @218
+ glVertexAttribIPointer @219
+ glGetVertexAttribIiv @220
+ glGetVertexAttribIuiv @221
+ glVertexAttribI4i @222
+ glVertexAttribI4ui @223
+ glVertexAttribI4iv @224
+ glVertexAttribI4uiv @225
+ glGetUniformuiv @226
+ glGetFragDataLocation @227
+ glUniform1ui @228
+ glUniform2ui @229
+ glUniform3ui @230
+ glUniform4ui @231
+ glUniform1uiv @232
+ glUniform2uiv @233
+ glUniform3uiv @234
+ glUniform4uiv @235
+ glClearBufferiv @236
+ glClearBufferuiv @237
+ glClearBufferfv @238
+ glClearBufferfi @239
+ glGetStringi @240
+ glCopyBufferSubData @241
+ glGetUniformIndices @242
+ glGetActiveUniformsiv @243
+ glGetUniformBlockIndex @244
+ glGetActiveUniformBlockiv @245
+ glGetActiveUniformBlockName @246
+ glUniformBlockBinding @247
+ glDrawArraysInstanced @248
+ glDrawElementsInstanced @249
+ glFenceSync @250
+ glIsSync @251
+ glDeleteSync @252
+ glClientWaitSync @253
+ glWaitSync @254
+ glGetInteger64v @255
+ glGetSynciv @256
+ glGetInteger64i_v @257
+ glGetBufferParameteri64v @258
+ glGenSamplers @259
+ glDeleteSamplers @260
+ glIsSampler @261
+ glBindSampler @262
+ glSamplerParameteri @263
+ glSamplerParameteriv @264
+ glSamplerParameterf @265
+ glSamplerParameterfv @266
+ glGetSamplerParameteriv @267
+ glGetSamplerParameterfv @268
+ glVertexAttribDivisor @269
+ glBindTransformFeedback @270
+ glDeleteTransformFeedbacks @271
+ glGenTransformFeedbacks @272
+ glIsTransformFeedback @273
+ glPauseTransformFeedback @274
+ glResumeTransformFeedback @275
+ glGetProgramBinary @276
+ glProgramBinary @277
+ glProgramParameteri @278
+ glInvalidateFramebuffer @279
+ glInvalidateSubFramebuffer @280
+ glTexStorage2D @281
+ glTexStorage3D @282
+ glGetInternalformativ @283
- ; ANGLE Platform Implementation
- ANGLEPlatformCurrent@0 @290
- ANGLEPlatformInitialize@4 @291
- ANGLEPlatformShutdown@0 @292
- \ No newline at end of file
+ ; GLES 3.1 Functions
+ glDispatchCompute @345
+ glDispatchComputeIndirect @346
+ glDrawArraysIndirect @347
+ glDrawElementsIndirect @348
+ glFramebufferParameteri @349
+ glGetFramebufferParameteriv @350
+ glGetProgramInterfaceiv @351
+ glGetProgramResourceIndex @352
+ glGetProgramResourceName @353
+ glGetProgramResourceiv @354
+ glGetProgramResourceLocation @355
+ glUseProgramStages @356
+ glActiveShaderProgram @357
+ glCreateShaderProgramv @358
+ glBindProgramPipeline @359
+ glDeleteProgramPipelines @360
+ glGenProgramPipelines @361
+ glIsProgramPipeline @362
+ glGetProgramPipelineiv @363
+ glProgramUniform1i @364
+ glProgramUniform2i @365
+ glProgramUniform3i @366
+ glProgramUniform4i @367
+ glProgramUniform1ui @368
+ glProgramUniform2ui @369
+ glProgramUniform3ui @370
+ glProgramUniform4ui @371
+ glProgramUniform1f @372
+ glProgramUniform2f @373
+ glProgramUniform3f @374
+ glProgramUniform4f @375
+ glProgramUniform1iv @376
+ glProgramUniform2iv @377
+ glProgramUniform3iv @378
+ glProgramUniform4iv @379
+ glProgramUniform1uiv @380
+ glProgramUniform2uiv @381
+ glProgramUniform3uiv @382
+ glProgramUniform4uiv @383
+ glProgramUniform1fv @384
+ glProgramUniform2fv @385
+ glProgramUniform3fv @386
+ glProgramUniform4fv @387
+ glProgramUniformMatrix2fv @388
+ glProgramUniformMatrix3fv @389
+ glProgramUniformMatrix4fv @390
+ glProgramUniformMatrix2x3fv @391
+ glProgramUniformMatrix3x2fv @392
+ glProgramUniformMatrix2x4fv @393
+ glProgramUniformMatrix4x2fv @394
+ glProgramUniformMatrix3x4fv @395
+ glProgramUniformMatrix4x3fv @396
+ glValidateProgramPipeline @397
+ glGetProgramPipelineInfoLog @398
+ glBindImageTexture @399
+ glGetBooleani_v @400
+ glMemoryBarrier @401
+ glMemoryBarrierByRegion @402
+ glTexStorage2DMultisample @403
+ glGetMultisamplefv @404
+ glSampleMaski @405
+ glGetTexLevelParameteriv @406
+ glGetTexLevelParameterfv @407
+ glBindVertexBuffer @408
+ glVertexAttribFormat @409
+ glVertexAttribIFormat @410
+ glVertexAttribBinding @411
+ glVertexBindingDivisor @412
diff --git a/src/3rdparty/angle/src/libGLESv2/libGLESv2d.def b/src/3rdparty/angle/src/libGLESv2/libGLESv2d.def
index e0c3823abf..9a00a9f8ae 100644
--- a/src/3rdparty/angle/src/libGLESv2/libGLESv2d.def
+++ b/src/3rdparty/angle/src/libGLESv2/libGLESv2d.def
@@ -202,6 +202,38 @@ EXPORTS
glGetQueryObjectivEXT @315
glGetQueryObjecti64vEXT @316
glGetQueryObjectui64vEXT @317
+ glBindUniformLocationCHROMIUM @318
+ glCoverageModulationCHROMIUM @319
+
+ glMatrixLoadfCHROMIUM @320
+ glMatrixLoadIdentityCHROMIUM @321
+ glGenPathsCHROMIUM @322
+ glDeletePathsCHROMIUM @323
+ glIsPathCHROMIUM @324
+ glPathCommandsCHROMIUM @325
+ glPathParameterfCHROMIUM @326
+ glPathParameteriCHROMIUM @327
+ glGetPathParameterfvCHROMIUM @328
+ glGetPathParameterivCHROMIUM @329
+ glPathStencilFuncCHROMIUM @330
+ glStencilFillPathCHROMIUM @331
+ glStencilStrokePathCHROMIUM @332
+ glCoverFillPathCHROMIUM @333
+ glCoverStrokePathCHROMIUM @334
+ glStencilThenCoverFillPathCHROMIUM @335
+ glStencilThenCoverStrokePathCHROMIUM @336
+ glCoverFillPathInstancedCHROMIUM @337
+ glCoverStrokePathInstancedCHROMIUM @338
+ glStencilStrokePathInstancedCHROMIUM @339
+ glStencilFillPathInstancedCHROMIUM @340
+ glStencilThenCoverFillPathInstancedCHROMIUM @341
+ glStencilThenCoverStrokePathInstancedCHROMIUM @342
+ glBindFragmentInputLocationCHROMIUM @343
+ glProgramPathFragmentInputGenCHROMIUM @344
+
+ glFramebufferTextureMultiviewLayeredANGLE @413
+ glFramebufferTextureMultiviewSideBySideANGLE @414
+ glRequestExtensionANGLE @415
; GLES 3.0 Functions
glReadBuffer @180
@@ -309,7 +341,72 @@ EXPORTS
glTexStorage3D @282
glGetInternalformativ @283
- ; ANGLE Platform Implementation
- ANGLEPlatformCurrent @290
- ANGLEPlatformInitialize @291
- ANGLEPlatformShutdown @292
+ ; GLES 3.1 Functions
+ glDispatchCompute @345
+ glDispatchComputeIndirect @346
+ glDrawArraysIndirect @347
+ glDrawElementsIndirect @348
+ glFramebufferParameteri @349
+ glGetFramebufferParameteriv @350
+ glGetProgramInterfaceiv @351
+ glGetProgramResourceIndex @352
+ glGetProgramResourceName @353
+ glGetProgramResourceiv @354
+ glGetProgramResourceLocation @355
+ glUseProgramStages @356
+ glActiveShaderProgram @357
+ glCreateShaderProgramv @358
+ glBindProgramPipeline @359
+ glDeleteProgramPipelines @360
+ glGenProgramPipelines @361
+ glIsProgramPipeline @362
+ glGetProgramPipelineiv @363
+ glProgramUniform1i @364
+ glProgramUniform2i @365
+ glProgramUniform3i @366
+ glProgramUniform4i @367
+ glProgramUniform1ui @368
+ glProgramUniform2ui @369
+ glProgramUniform3ui @370
+ glProgramUniform4ui @371
+ glProgramUniform1f @372
+ glProgramUniform2f @373
+ glProgramUniform3f @374
+ glProgramUniform4f @375
+ glProgramUniform1iv @376
+ glProgramUniform2iv @377
+ glProgramUniform3iv @378
+ glProgramUniform4iv @379
+ glProgramUniform1uiv @380
+ glProgramUniform2uiv @381
+ glProgramUniform3uiv @382
+ glProgramUniform4uiv @383
+ glProgramUniform1fv @384
+ glProgramUniform2fv @385
+ glProgramUniform3fv @386
+ glProgramUniform4fv @387
+ glProgramUniformMatrix2fv @388
+ glProgramUniformMatrix3fv @389
+ glProgramUniformMatrix4fv @390
+ glProgramUniformMatrix2x3fv @391
+ glProgramUniformMatrix3x2fv @392
+ glProgramUniformMatrix2x4fv @393
+ glProgramUniformMatrix4x2fv @394
+ glProgramUniformMatrix3x4fv @395
+ glProgramUniformMatrix4x3fv @396
+ glValidateProgramPipeline @397
+ glGetProgramPipelineInfoLog @398
+ glBindImageTexture @399
+ glGetBooleani_v @400
+ glMemoryBarrier @401
+ glMemoryBarrierByRegion @402
+ glTexStorage2DMultisample @403
+ glGetMultisamplefv @404
+ glSampleMaski @405
+ glGetTexLevelParameteriv @406
+ glGetTexLevelParameterfv @407
+ glBindVertexBuffer @408
+ glVertexAttribFormat @409
+ glVertexAttribIFormat @410
+ glVertexAttribBinding @411
+ glVertexBindingDivisor @412
diff --git a/src/3rdparty/angle/src/libGLESv2/libGLESv2d_mingw32.def b/src/3rdparty/angle/src/libGLESv2/libGLESv2d_mingw32.def
deleted file mode 100644
index 5a4966f66d..0000000000
--- a/src/3rdparty/angle/src/libGLESv2/libGLESv2d_mingw32.def
+++ /dev/null
@@ -1,316 +0,0 @@
-LIBRARY libGLESv2d
-EXPORTS
- glActiveTexture@4 @1
- glAttachShader@8 @2
- glBindAttribLocation@12 @3
- glBindBuffer@8 @4
- glBindFramebuffer@8 @5
- glBindRenderbuffer@8 @6
- glBindTexture@8 @7
- glBlendColor@16 @8
- glBlendEquation@4 @9
- glBlendEquationSeparate@8 @10
- glBlendFunc@8 @11
- glBlendFuncSeparate@16 @12
- glBufferData@16 @13
- glBufferSubData@16 @14
- glCheckFramebufferStatus@4 @15
- glClear@4 @16
- glClearColor@16 @17
- glClearDepthf@4 @18
- glClearStencil@4 @19
- glColorMask@16 @20
- glCompileShader@4 @21
- glCompressedTexImage2D@32 @22
- glCompressedTexSubImage2D@36 @23
- glCopyTexImage2D@32 @24
- glCopyTexSubImage2D@32 @25
- glCreateProgram@0 @26
- glCreateShader@4 @27
- glCullFace@4 @28
- glDeleteBuffers@8 @29
- glDeleteFramebuffers@8 @30
- glDeleteProgram@4 @32
- glDeleteRenderbuffers@8 @33
- glDeleteShader@4 @34
- glDeleteTextures@8 @31
- glDepthFunc@4 @36
- glDepthMask@4 @37
- glDepthRangef@8 @38
- glDetachShader@8 @35
- glDisable@4 @39
- glDisableVertexAttribArray@4 @40
- glDrawArrays@12 @41
- glDrawElements@16 @42
- glEnable@4 @43
- glEnableVertexAttribArray@4 @44
- glFinish@0 @45
- glFlush@0 @46
- glFramebufferRenderbuffer@16 @47
- glFramebufferTexture2D@20 @48
- glFrontFace@4 @49
- glGenBuffers@8 @50
- glGenFramebuffers@8 @52
- glGenRenderbuffers@8 @53
- glGenTextures@8 @54
- glGenerateMipmap@4 @51
- glGetActiveAttrib@28 @55
- glGetActiveUniform@28 @56
- glGetAttachedShaders@16 @57
- glGetAttribLocation@8 @58
- glGetBooleanv@8 @59
- glGetBufferParameteriv@12 @60
- glGetError@0 @61
- glGetFloatv@8 @62
- glGetFramebufferAttachmentParameteriv@16 @63
- glGetIntegerv@8 @64
- glGetProgramInfoLog@16 @66
- glGetProgramiv@12 @65
- glGetRenderbufferParameteriv@12 @67
- glGetShaderInfoLog@16 @69
- glGetShaderPrecisionFormat@16 @70
- glGetShaderSource@16 @71
- glGetShaderiv@12 @68
- glGetString@4 @72
- glGetTexParameterfv@12 @73
- glGetTexParameteriv@12 @74
- glGetUniformLocation@8 @77
- glGetUniformfv@12 @75
- glGetUniformiv@12 @76
- glGetVertexAttribPointerv@12 @80
- glGetVertexAttribfv@12 @78
- glGetVertexAttribiv@12 @79
- glHint@8 @81
- glIsBuffer@4 @82
- glIsEnabled@4 @83
- glIsFramebuffer@4 @84
- glIsProgram@4 @85
- glIsRenderbuffer@4 @86
- glIsShader@4 @87
- glIsTexture@4 @88
- glLineWidth@4 @89
- glLinkProgram@4 @90
- glPixelStorei@8 @91
- glPolygonOffset@8 @92
- glReadPixels@28 @93
- glReleaseShaderCompiler@0 @94
- glRenderbufferStorage@16 @95
- glSampleCoverage@8 @96
- glScissor@16 @97
- glShaderBinary@20 @98
- glShaderSource@16 @99
- glStencilFunc@12 @100
- glStencilFuncSeparate@16 @101
- glStencilMask@4 @102
- glStencilMaskSeparate@8 @103
- glStencilOp@12 @104
- glStencilOpSeparate@16 @105
- glTexImage2D@36 @106
- glTexParameterf@12 @107
- glTexParameterfv@12 @108
- glTexParameteri@12 @109
- glTexParameteriv@12 @110
- glTexSubImage2D@36 @111
- glUniform1f@8 @112
- glUniform1fv@12 @113
- glUniform1i@8 @114
- glUniform1iv@12 @115
- glUniform2f@12 @116
- glUniform2fv@12 @117
- glUniform2i@12 @118
- glUniform2iv@12 @119
- glUniform3f@16 @120
- glUniform3fv@12 @121
- glUniform3i@16 @122
- glUniform3iv@12 @123
- glUniform4f@20 @124
- glUniform4fv@12 @125
- glUniform4i@20 @126
- glUniform4iv@12 @127
- glUniformMatrix2fv@16 @128
- glUniformMatrix3fv@16 @129
- glUniformMatrix4fv@16 @130
- glUseProgram@4 @131
- glValidateProgram@4 @132
- glVertexAttrib1f@8 @133
- glVertexAttrib1fv@8 @134
- glVertexAttrib2f@12 @135
- glVertexAttrib2fv@8 @136
- glVertexAttrib3f@16 @137
- glVertexAttrib3fv@8 @138
- glVertexAttrib4f@20 @139
- glVertexAttrib4fv@8 @140
- glVertexAttribPointer@24 @141
- glViewport@16 @142
-
- ; Extensions
- glBlitFramebufferANGLE@40 @149
- glRenderbufferStorageMultisampleANGLE@20 @150
- glDeleteFencesNV@8 @151
- glFinishFenceNV@4 @152
- glGenFencesNV@8 @153
- glGetFenceivNV@12 @154
- glIsFenceNV@4 @155
- glSetFenceNV@8 @156
- glTestFenceNV@4 @157
- glGetTranslatedShaderSourceANGLE@16 @159
- glTexStorage2DEXT@20 @160
- glGetGraphicsResetStatusEXT@0 @161
- glReadnPixelsEXT@32 @162
- glGetnUniformfvEXT@16 @163
- glGetnUniformivEXT@16 @164
- glGenQueriesEXT@8 @165
- glDeleteQueriesEXT@8 @166
- glIsQueryEXT@4 @167
- glBeginQueryEXT@8 @168
- glEndQueryEXT@4 @169
- glGetQueryivEXT@12 @170
- glGetQueryObjectuivEXT@12 @171
- glVertexAttribDivisorANGLE@8 @172
- glDrawArraysInstancedANGLE@16 @173
- glDrawElementsInstancedANGLE@20 @174
- glProgramBinaryOES@16 @175
- glGetProgramBinaryOES@20 @176
- glDrawBuffersEXT@8 @179
- glMapBufferOES@8 @285
- glUnmapBufferOES@4 @286
- glGetBufferPointervOES@12 @287
- glMapBufferRangeEXT@16 @288
- glFlushMappedBufferRangeEXT@12 @289
- glDiscardFramebufferEXT@12 @293
- glInsertEventMarkerEXT@8 @294
- glPushGroupMarkerEXT@8 @295
- glPopGroupMarkerEXT@0 @296
- glEGLImageTargetTexture2DOES@8 @297
- glEGLImageTargetRenderbufferStorageOES@8 @298
- glBindVertexArrayOES@4 @299
- glDeleteVertexArraysOES@8 @300
- glGenVertexArraysOES@8 @301
- glIsVertexArrayOES@4 @302
- glDebugMessageControlKHR@24 @303
- glDebugMessageInsertKHR@24 @304
- glDebugMessageCallbackKHR@8 @305
- glGetDebugMessageLogKHR@32 @306
- glPushDebugGroupKHR@16 @307
- glPopDebugGroupKHR@0 @308
- glObjectLabelKHR@16 @309
- glGetObjectLabelKHR@20 @310
- glObjectPtrLabelKHR@12 @311
- glGetObjectPtrLabelKHR@16 @312
- glGetPointervKHR@8 @313
- glQueryCounterEXT@8 @314
- glGetQueryObjectivEXT@12 @315
- glGetQueryObjecti64vEXT@12 @316
- glGetQueryObjectui64vEXT@12 @317
-
- ; GLES 3.0 Functions
- glReadBuffer@4 @180
- glDrawRangeElements@24 @181
- glTexImage3D@40 @182
- glTexSubImage3D@44 @183
- glCopyTexSubImage3D@36 @184
- glCompressedTexImage3D@36 @185
- glCompressedTexSubImage3D@44 @186
- glGenQueries@8 @187
- glDeleteQueries@8 @188
- glIsQuery@4 @189
- glBeginQuery@8 @190
- glEndQuery@4 @191
- glGetQueryiv@12 @192
- glGetQueryObjectuiv@12 @193
- glUnmapBuffer@4 @194
- glGetBufferPointerv@12 @195
- glDrawBuffers@8 @196
- glUniformMatrix2x3fv@16 @197
- glUniformMatrix3x2fv@16 @198
- glUniformMatrix2x4fv@16 @199
- glUniformMatrix4x2fv@16 @200
- glUniformMatrix3x4fv@16 @201
- glUniformMatrix4x3fv@16 @202
- glBlitFramebuffer@40 @203
- glRenderbufferStorageMultisample@20 @204
- glFramebufferTextureLayer@20 @205
- glMapBufferRange@16 @206
- glFlushMappedBufferRange@12 @207
- glBindVertexArray@4 @208
- glDeleteVertexArrays@8 @209
- glGenVertexArrays@8 @210
- glIsVertexArray@4 @211
- glGetIntegeri_v@12 @212
- glBeginTransformFeedback@4 @213
- glEndTransformFeedback@0 @214
- glBindBufferRange@20 @215
- glBindBufferBase@12 @216
- glTransformFeedbackVaryings@16 @217
- glGetTransformFeedbackVarying@28 @218
- glVertexAttribIPointer@20 @219
- glGetVertexAttribIiv@12 @220
- glGetVertexAttribIuiv@12 @221
- glVertexAttribI4i@20 @222
- glVertexAttribI4ui@20 @223
- glVertexAttribI4iv@8 @224
- glVertexAttribI4uiv@8 @225
- glGetUniformuiv@12 @226
- glGetFragDataLocation@8 @227
- glUniform1ui@8 @228
- glUniform2ui@12 @229
- glUniform3ui@16 @230
- glUniform4ui@20 @231
- glUniform1uiv@12 @232
- glUniform2uiv@12 @233
- glUniform3uiv@12 @234
- glUniform4uiv@12 @235
- glClearBufferiv@12 @236
- glClearBufferuiv@12 @237
- glClearBufferfv@12 @238
- glClearBufferfi@16 @239
- glGetStringi@8 @240
- glCopyBufferSubData@20 @241
- glGetUniformIndices@16 @242
- glGetActiveUniformsiv@20 @243
- glGetUniformBlockIndex@8 @244
- glGetActiveUniformBlockiv@16 @245
- glGetActiveUniformBlockName@20 @246
- glUniformBlockBinding@12 @247
- glDrawArraysInstanced@16 @248
- glDrawElementsInstanced@20 @249
- glFenceSync@8 @250
- glIsSync@4 @251
- glDeleteSync@4 @252
- glClientWaitSync@16 @253
- glWaitSync@16 @254
- glGetInteger64v@8 @255
- glGetSynciv@20 @256
- glGetInteger64i_v@12 @257
- glGetBufferParameteri64v@12 @258
- glGenSamplers@8 @259
- glDeleteSamplers@8 @260
- glIsSampler@4 @261
- glBindSampler@8 @262
- glSamplerParameteri@12 @263
- glSamplerParameteriv@12 @264
- glSamplerParameterf@12 @265
- glSamplerParameterfv@12 @266
- glGetSamplerParameteriv@12 @267
- glGetSamplerParameterfv@12 @268
- glVertexAttribDivisor@8 @269
- glBindTransformFeedback@8 @270
- glDeleteTransformFeedbacks@8 @271
- glGenTransformFeedbacks@8 @272
- glIsTransformFeedback@4 @273
- glPauseTransformFeedback@0 @274
- glResumeTransformFeedback@0 @275
- glGetProgramBinary@20 @276
- glProgramBinary@16 @277
- glProgramParameteri@12 @278
- glInvalidateFramebuffer@12 @279
- glInvalidateSubFramebuffer@28 @280
- glTexStorage2D@20 @281
- glTexStorage3D@24 @282
- glGetInternalformativ@20 @283
-
- ; ANGLE Platform Implementation
- ANGLEPlatformCurrent@0 @290
- ANGLEPlatformInitialize@4 @291
- ANGLEPlatformShutdown@0 @292
- \ No newline at end of file
diff --git a/src/3rdparty/angle/src/libGLESv2/proc_table.h b/src/3rdparty/angle/src/libGLESv2/proc_table.h
new file mode 100644
index 0000000000..f718291be7
--- /dev/null
+++ b/src/3rdparty/angle/src/libGLESv2/proc_table.h
@@ -0,0 +1,24 @@
+//
+// Copyright 2017 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.
+//
+// getProcAddress loader table:
+// Mapping from a string entry point name to function address.
+//
+
+#ifndef LIBGLESV2_PROC_TABLE_H_
+#define LIBGLESV2_PROC_TABLE_H_
+
+#include <EGL/egl.h>
+#include <utility>
+
+namespace egl
+{
+using ProcEntry = std::pair<const char *, __eglMustCastToProperFunctionPointerType>;
+
+extern ProcEntry g_procTable[];
+extern size_t g_numProcs;
+} // namespace egl
+
+#endif // LIBGLESV2_PROC_TABLE_H_
diff --git a/src/3rdparty/angle/src/libGLESv2/proc_table_autogen.cpp b/src/3rdparty/angle/src/libGLESv2/proc_table_autogen.cpp
new file mode 100644
index 0000000000..f294c1edc3
--- /dev/null
+++ b/src/3rdparty/angle/src/libGLESv2/proc_table_autogen.cpp
@@ -0,0 +1,548 @@
+// GENERATED FILE - DO NOT EDIT.
+// Generated by gen_proc_table.py using data from proc_table_data.json.
+//
+// Copyright 2017 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.
+//
+// getProcAddress loader table:
+// Mapping from a string entry point name to function address.
+//
+
+#include "libGLESv2/proc_table.h"
+
+#include "libGLESv2/entry_points_egl.h"
+#include "libGLESv2/entry_points_egl_ext.h"
+#include "libGLESv2/entry_points_gles_2_0_autogen.h"
+#include "libGLESv2/entry_points_gles_2_0_ext.h"
+#include "libGLESv2/entry_points_gles_3_0_autogen.h"
+#include "libGLESv2/entry_points_gles_3_1_autogen.h"
+#include "platform/Platform.h"
+
+#define P(FUNC) reinterpret_cast<__eglMustCastToProperFunctionPointerType>(FUNC)
+
+namespace egl
+{
+ProcEntry g_procTable[] = {
+ {"ANGLEGetDisplayPlatform", P(ANGLEGetDisplayPlatform)},
+ {"ANGLEResetDisplayPlatform", P(ANGLEResetDisplayPlatform)},
+ {"eglBindAPI", P(egl::BindAPI)},
+ {"eglBindTexImage", P(egl::BindTexImage)},
+ {"eglChooseConfig", P(egl::ChooseConfig)},
+ {"eglClientWaitSync", P(egl::ClientWaitSync)},
+ {"eglCopyBuffers", P(egl::CopyBuffers)},
+ {"eglCreateContext", P(egl::CreateContext)},
+ {"eglCreateDeviceANGLE", P(egl::CreateDeviceANGLE)},
+ {"eglCreateImage", P(egl::CreateImage)},
+ {"eglCreateImageKHR", P(egl::CreateImageKHR)},
+ {"eglCreatePbufferFromClientBuffer", P(egl::CreatePbufferFromClientBuffer)},
+ {"eglCreatePbufferSurface", P(egl::CreatePbufferSurface)},
+ {"eglCreatePixmapSurface", P(egl::CreatePixmapSurface)},
+ {"eglCreatePlatformPixmapSurface", P(egl::CreatePlatformPixmapSurface)},
+ {"eglCreatePlatformWindowSurface", P(egl::CreatePlatformWindowSurface)},
+ {"eglCreateStreamKHR", P(egl::CreateStreamKHR)},
+ {"eglCreateStreamProducerD3DTextureNV12ANGLE", P(egl::CreateStreamProducerD3DTextureNV12ANGLE)},
+ {"eglCreateSync", P(egl::CreateSync)},
+ {"eglCreateWindowSurface", P(egl::CreateWindowSurface)},
+ {"eglDestroyContext", P(egl::DestroyContext)},
+ {"eglDestroyImage", P(egl::DestroyImage)},
+ {"eglDestroyImageKHR", P(egl::DestroyImageKHR)},
+ {"eglDestroyStreamKHR", P(egl::DestroyStreamKHR)},
+ {"eglDestroySurface", P(egl::DestroySurface)},
+ {"eglDestroySync", P(egl::DestroySync)},
+ {"eglGetConfigAttrib", P(egl::GetConfigAttrib)},
+ {"eglGetConfigs", P(egl::GetConfigs)},
+ {"eglGetCurrentContext", P(egl::GetCurrentContext)},
+ {"eglGetCurrentDisplay", P(egl::GetCurrentDisplay)},
+ {"eglGetCurrentSurface", P(egl::GetCurrentSurface)},
+ {"eglGetDisplay", P(egl::GetDisplay)},
+ {"eglGetError", P(egl::GetError)},
+ {"eglGetPlatformDisplay", P(egl::GetPlatformDisplay)},
+ {"eglGetPlatformDisplayEXT", P(egl::GetPlatformDisplayEXT)},
+ {"eglGetProcAddress", P(egl::GetProcAddress)},
+ {"eglGetSyncAttrib", P(egl::GetSyncAttrib)},
+ {"eglGetSyncValuesCHROMIUM", P(egl::GetSyncValuesCHROMIUM)},
+ {"eglInitialize", P(egl::Initialize)},
+ {"eglMakeCurrent", P(egl::MakeCurrent)},
+ {"eglPostSubBufferNV", P(egl::PostSubBufferNV)},
+ {"eglProgramCacheGetAttribANGLE", P(egl::ProgramCacheGetAttribANGLE)},
+ {"eglProgramCachePopulateANGLE", P(egl::ProgramCachePopulateANGLE)},
+ {"eglProgramCacheQueryANGLE", P(egl::ProgramCacheQueryANGLE)},
+ {"eglProgramCacheResizeANGLE", P(egl::ProgramCacheResizeANGLE)},
+ {"eglQueryAPI", P(egl::QueryAPI)},
+ {"eglQueryContext", P(egl::QueryContext)},
+ {"eglQueryDeviceAttribEXT", P(egl::QueryDeviceAttribEXT)},
+ {"eglQueryDeviceStringEXT", P(egl::QueryDeviceStringEXT)},
+ {"eglQueryDisplayAttribEXT", P(egl::QueryDisplayAttribEXT)},
+ {"eglQueryStreamKHR", P(egl::QueryStreamKHR)},
+ {"eglQueryStreamu64KHR", P(egl::QueryStreamu64KHR)},
+ {"eglQueryString", P(egl::QueryString)},
+ {"eglQuerySurface", P(egl::QuerySurface)},
+ {"eglQuerySurfacePointerANGLE", P(egl::QuerySurfacePointerANGLE)},
+ {"eglReleaseDeviceANGLE", P(egl::ReleaseDeviceANGLE)},
+ {"eglReleaseTexImage", P(egl::ReleaseTexImage)},
+ {"eglReleaseThread", P(egl::ReleaseThread)},
+ {"eglStreamAttribKHR", P(egl::StreamAttribKHR)},
+ {"eglStreamConsumerAcquireKHR", P(egl::StreamConsumerAcquireKHR)},
+ {"eglStreamConsumerGLTextureExternalAttribsNV",
+ P(egl::StreamConsumerGLTextureExternalAttribsNV)},
+ {"eglStreamConsumerGLTextureExternalKHR", P(egl::StreamConsumerGLTextureExternalKHR)},
+ {"eglStreamConsumerReleaseKHR", P(egl::StreamConsumerReleaseKHR)},
+ {"eglStreamPostD3DTextureNV12ANGLE", P(egl::StreamPostD3DTextureNV12ANGLE)},
+ {"eglSurfaceAttrib", P(egl::SurfaceAttrib)},
+ {"eglSwapBuffers", P(egl::SwapBuffers)},
+ {"eglSwapBuffersWithDamageEXT", P(egl::SwapBuffersWithDamageEXT)},
+ {"eglSwapInterval", P(egl::SwapInterval)},
+ {"eglTerminate", P(egl::Terminate)},
+ {"eglWaitClient", P(egl::WaitClient)},
+ {"eglWaitGL", P(egl::WaitGL)},
+ {"eglWaitNative", P(egl::WaitNative)},
+ {"eglWaitSync", P(egl::WaitSync)},
+ {"glActiveShaderProgram", P(gl::ActiveShaderProgram)},
+ {"glActiveTexture", P(gl::ActiveTexture)},
+ {"glAttachShader", P(gl::AttachShader)},
+ {"glBeginQuery", P(gl::BeginQuery)},
+ {"glBeginQueryEXT", P(gl::BeginQueryEXT)},
+ {"glBeginTransformFeedback", P(gl::BeginTransformFeedback)},
+ {"glBindAttribLocation", P(gl::BindAttribLocation)},
+ {"glBindBuffer", P(gl::BindBuffer)},
+ {"glBindBufferBase", P(gl::BindBufferBase)},
+ {"glBindBufferRange", P(gl::BindBufferRange)},
+ {"glBindFramebuffer", P(gl::BindFramebuffer)},
+ {"glBindImageTexture", P(gl::BindImageTexture)},
+ {"glBindProgramPipeline", P(gl::BindProgramPipeline)},
+ {"glBindRenderbuffer", P(gl::BindRenderbuffer)},
+ {"glBindSampler", P(gl::BindSampler)},
+ {"glBindTexture", P(gl::BindTexture)},
+ {"glBindTransformFeedback", P(gl::BindTransformFeedback)},
+ {"glBindUniformLocationCHROMIUM", P(gl::BindUniformLocationCHROMIUM)},
+ {"glBindVertexArray", P(gl::BindVertexArray)},
+ {"glBindVertexArrayOES", P(gl::BindVertexArrayOES)},
+ {"glBindVertexBuffer", P(gl::BindVertexBuffer)},
+ {"glBlendColor", P(gl::BlendColor)},
+ {"glBlendEquation", P(gl::BlendEquation)},
+ {"glBlendEquationSeparate", P(gl::BlendEquationSeparate)},
+ {"glBlendFunc", P(gl::BlendFunc)},
+ {"glBlendFuncSeparate", P(gl::BlendFuncSeparate)},
+ {"glBlitFramebuffer", P(gl::BlitFramebuffer)},
+ {"glBlitFramebufferANGLE", P(gl::BlitFramebufferANGLE)},
+ {"glBufferData", P(gl::BufferData)},
+ {"glBufferSubData", P(gl::BufferSubData)},
+ {"glCheckFramebufferStatus", P(gl::CheckFramebufferStatus)},
+ {"glClear", P(gl::Clear)},
+ {"glClearBufferfi", P(gl::ClearBufferfi)},
+ {"glClearBufferfv", P(gl::ClearBufferfv)},
+ {"glClearBufferiv", P(gl::ClearBufferiv)},
+ {"glClearBufferuiv", P(gl::ClearBufferuiv)},
+ {"glClearColor", P(gl::ClearColor)},
+ {"glClearDepthf", P(gl::ClearDepthf)},
+ {"glClearStencil", P(gl::ClearStencil)},
+ {"glClientWaitSync", P(gl::ClientWaitSync)},
+ {"glColorMask", P(gl::ColorMask)},
+ {"glCompileShader", P(gl::CompileShader)},
+ {"glCompressedCopyTextureCHROMIUM", P(gl::CompressedCopyTextureCHROMIUM)},
+ {"glCompressedTexImage2D", P(gl::CompressedTexImage2D)},
+ {"glCompressedTexImage2DRobustANGLE", P(gl::CompressedTexImage2DRobustANGLE)},
+ {"glCompressedTexImage3D", P(gl::CompressedTexImage3D)},
+ {"glCompressedTexImage3DRobustANGLE", P(gl::CompressedTexImage3DRobustANGLE)},
+ {"glCompressedTexSubImage2D", P(gl::CompressedTexSubImage2D)},
+ {"glCompressedTexSubImage2DRobustANGLE", P(gl::CompressedTexSubImage2DRobustANGLE)},
+ {"glCompressedTexSubImage3D", P(gl::CompressedTexSubImage3D)},
+ {"glCompressedTexSubImage3DRobustANGLE", P(gl::CompressedTexSubImage3DRobustANGLE)},
+ {"glCopyBufferSubData", P(gl::CopyBufferSubData)},
+ {"glCopySubTextureCHROMIUM", P(gl::CopySubTextureCHROMIUM)},
+ {"glCopyTexImage2D", P(gl::CopyTexImage2D)},
+ {"glCopyTexSubImage2D", P(gl::CopyTexSubImage2D)},
+ {"glCopyTexSubImage3D", P(gl::CopyTexSubImage3D)},
+ {"glCopyTextureCHROMIUM", P(gl::CopyTextureCHROMIUM)},
+ {"glCreateProgram", P(gl::CreateProgram)},
+ {"glCreateShader", P(gl::CreateShader)},
+ {"glCreateShaderProgramv", P(gl::CreateShaderProgramv)},
+ {"glCullFace", P(gl::CullFace)},
+ {"glDebugMessageCallbackKHR", P(gl::DebugMessageCallbackKHR)},
+ {"glDebugMessageControlKHR", P(gl::DebugMessageControlKHR)},
+ {"glDebugMessageInsertKHR", P(gl::DebugMessageInsertKHR)},
+ {"glDeleteBuffers", P(gl::DeleteBuffers)},
+ {"glDeleteFencesNV", P(gl::DeleteFencesNV)},
+ {"glDeleteFramebuffers", P(gl::DeleteFramebuffers)},
+ {"glDeleteProgram", P(gl::DeleteProgram)},
+ {"glDeleteProgramPipelines", P(gl::DeleteProgramPipelines)},
+ {"glDeleteQueries", P(gl::DeleteQueries)},
+ {"glDeleteQueriesEXT", P(gl::DeleteQueriesEXT)},
+ {"glDeleteRenderbuffers", P(gl::DeleteRenderbuffers)},
+ {"glDeleteSamplers", P(gl::DeleteSamplers)},
+ {"glDeleteShader", P(gl::DeleteShader)},
+ {"glDeleteSync", P(gl::DeleteSync)},
+ {"glDeleteTextures", P(gl::DeleteTextures)},
+ {"glDeleteTransformFeedbacks", P(gl::DeleteTransformFeedbacks)},
+ {"glDeleteVertexArrays", P(gl::DeleteVertexArrays)},
+ {"glDeleteVertexArraysOES", P(gl::DeleteVertexArraysOES)},
+ {"glDepthFunc", P(gl::DepthFunc)},
+ {"glDepthMask", P(gl::DepthMask)},
+ {"glDepthRangef", P(gl::DepthRangef)},
+ {"glDetachShader", P(gl::DetachShader)},
+ {"glDisable", P(gl::Disable)},
+ {"glDisableVertexAttribArray", P(gl::DisableVertexAttribArray)},
+ {"glDiscardFramebufferEXT", P(gl::DiscardFramebufferEXT)},
+ {"glDispatchCompute", P(gl::DispatchCompute)},
+ {"glDispatchComputeIndirect", P(gl::DispatchComputeIndirect)},
+ {"glDrawArrays", P(gl::DrawArrays)},
+ {"glDrawArraysIndirect", P(gl::DrawArraysIndirect)},
+ {"glDrawArraysInstanced", P(gl::DrawArraysInstanced)},
+ {"glDrawArraysInstancedANGLE", P(gl::DrawArraysInstancedANGLE)},
+ {"glDrawBuffers", P(gl::DrawBuffers)},
+ {"glDrawBuffersEXT", P(gl::DrawBuffersEXT)},
+ {"glDrawElements", P(gl::DrawElements)},
+ {"glDrawElementsIndirect", P(gl::DrawElementsIndirect)},
+ {"glDrawElementsInstanced", P(gl::DrawElementsInstanced)},
+ {"glDrawElementsInstancedANGLE", P(gl::DrawElementsInstancedANGLE)},
+ {"glDrawRangeElements", P(gl::DrawRangeElements)},
+ {"glEGLImageTargetRenderbufferStorageOES", P(gl::EGLImageTargetRenderbufferStorageOES)},
+ {"glEGLImageTargetTexture2DOES", P(gl::EGLImageTargetTexture2DOES)},
+ {"glEnable", P(gl::Enable)},
+ {"glEnableVertexAttribArray", P(gl::EnableVertexAttribArray)},
+ {"glEndQuery", P(gl::EndQuery)},
+ {"glEndQueryEXT", P(gl::EndQueryEXT)},
+ {"glEndTransformFeedback", P(gl::EndTransformFeedback)},
+ {"glFenceSync", P(gl::FenceSync)},
+ {"glFinish", P(gl::Finish)},
+ {"glFinishFenceNV", P(gl::FinishFenceNV)},
+ {"glFlush", P(gl::Flush)},
+ {"glFlushMappedBufferRange", P(gl::FlushMappedBufferRange)},
+ {"glFlushMappedBufferRangeEXT", P(gl::FlushMappedBufferRangeEXT)},
+ {"glFramebufferParameteri", P(gl::FramebufferParameteri)},
+ {"glFramebufferRenderbuffer", P(gl::FramebufferRenderbuffer)},
+ {"glFramebufferTexture2D", P(gl::FramebufferTexture2D)},
+ {"glFramebufferTextureLayer", P(gl::FramebufferTextureLayer)},
+ {"glFramebufferTextureMultiviewLayeredANGLE", P(gl::FramebufferTextureMultiviewLayeredANGLE)},
+ {"glFramebufferTextureMultiviewSideBySideANGLE",
+ P(gl::FramebufferTextureMultiviewSideBySideANGLE)},
+ {"glFrontFace", P(gl::FrontFace)},
+ {"glGenBuffers", P(gl::GenBuffers)},
+ {"glGenFencesNV", P(gl::GenFencesNV)},
+ {"glGenFramebuffers", P(gl::GenFramebuffers)},
+ {"glGenProgramPipelines", P(gl::GenProgramPipelines)},
+ {"glGenQueries", P(gl::GenQueries)},
+ {"glGenQueriesEXT", P(gl::GenQueriesEXT)},
+ {"glGenRenderbuffers", P(gl::GenRenderbuffers)},
+ {"glGenSamplers", P(gl::GenSamplers)},
+ {"glGenTextures", P(gl::GenTextures)},
+ {"glGenTransformFeedbacks", P(gl::GenTransformFeedbacks)},
+ {"glGenVertexArrays", P(gl::GenVertexArrays)},
+ {"glGenVertexArraysOES", P(gl::GenVertexArraysOES)},
+ {"glGenerateMipmap", P(gl::GenerateMipmap)},
+ {"glGetActiveAttrib", P(gl::GetActiveAttrib)},
+ {"glGetActiveUniform", P(gl::GetActiveUniform)},
+ {"glGetActiveUniformBlockName", P(gl::GetActiveUniformBlockName)},
+ {"glGetActiveUniformBlockiv", P(gl::GetActiveUniformBlockiv)},
+ {"glGetActiveUniformBlockivRobustANGLE", P(gl::GetActiveUniformBlockivRobustANGLE)},
+ {"glGetActiveUniformsiv", P(gl::GetActiveUniformsiv)},
+ {"glGetAttachedShaders", P(gl::GetAttachedShaders)},
+ {"glGetAttribLocation", P(gl::GetAttribLocation)},
+ {"glGetBooleani_v", P(gl::GetBooleani_v)},
+ {"glGetBooleani_vRobustANGLE", P(gl::GetBooleani_vRobustANGLE)},
+ {"glGetBooleanv", P(gl::GetBooleanv)},
+ {"glGetBooleanvRobustANGLE", P(gl::GetBooleanvRobustANGLE)},
+ {"glGetBufferParameteri64v", P(gl::GetBufferParameteri64v)},
+ {"glGetBufferParameteri64vRobustANGLE", P(gl::GetBufferParameteri64vRobustANGLE)},
+ {"glGetBufferParameteriv", P(gl::GetBufferParameteriv)},
+ {"glGetBufferParameterivRobustANGLE", P(gl::GetBufferParameterivRobustANGLE)},
+ {"glGetBufferPointerv", P(gl::GetBufferPointerv)},
+ {"glGetBufferPointervOES", P(gl::GetBufferPointervOES)},
+ {"glGetBufferPointervRobustANGLE", P(gl::GetBufferPointervRobustANGLE)},
+ {"glGetDebugMessageLogKHR", P(gl::GetDebugMessageLogKHR)},
+ {"glGetError", P(gl::GetError)},
+ {"glGetFenceivNV", P(gl::GetFenceivNV)},
+ {"glGetFloatv", P(gl::GetFloatv)},
+ {"glGetFloatvRobustANGLE", P(gl::GetFloatvRobustANGLE)},
+ {"glGetFragDataLocation", P(gl::GetFragDataLocation)},
+ {"glGetFramebufferAttachmentParameteriv", P(gl::GetFramebufferAttachmentParameteriv)},
+ {"glGetFramebufferAttachmentParameterivRobustANGLE",
+ P(gl::GetFramebufferAttachmentParameterivRobustANGLE)},
+ {"glGetFramebufferParameteriv", P(gl::GetFramebufferParameteriv)},
+ {"glGetFramebufferParameterivRobustANGLE", P(gl::GetFramebufferParameterivRobustANGLE)},
+ {"glGetGraphicsResetStatusEXT", P(gl::GetGraphicsResetStatusEXT)},
+ {"glGetInteger64i_v", P(gl::GetInteger64i_v)},
+ {"glGetInteger64i_vRobustANGLE", P(gl::GetInteger64i_vRobustANGLE)},
+ {"glGetInteger64v", P(gl::GetInteger64v)},
+ {"glGetInteger64vRobustANGLE", P(gl::GetInteger64vRobustANGLE)},
+ {"glGetIntegeri_v", P(gl::GetIntegeri_v)},
+ {"glGetIntegeri_vRobustANGLE", P(gl::GetIntegeri_vRobustANGLE)},
+ {"glGetIntegerv", P(gl::GetIntegerv)},
+ {"glGetIntegervRobustANGLE", P(gl::GetIntegervRobustANGLE)},
+ {"glGetInternalformativ", P(gl::GetInternalformativ)},
+ {"glGetInternalformativRobustANGLE", P(gl::GetInternalformativRobustANGLE)},
+ {"glGetMultisamplefv", P(gl::GetMultisamplefv)},
+ {"glGetMultisamplefvRobustANGLE", P(gl::GetMultisamplefvRobustANGLE)},
+ {"glGetObjectLabelKHR", P(gl::GetObjectLabelKHR)},
+ {"glGetObjectPtrLabelKHR", P(gl::GetObjectPtrLabelKHR)},
+ {"glGetPointervKHR", P(gl::GetPointervKHR)},
+ {"glGetPointervRobustANGLERobustANGLE", P(gl::GetPointervRobustANGLERobustANGLE)},
+ {"glGetProgramBinary", P(gl::GetProgramBinary)},
+ {"glGetProgramBinaryOES", P(gl::GetProgramBinaryOES)},
+ {"glGetProgramInfoLog", P(gl::GetProgramInfoLog)},
+ {"glGetProgramInterfaceiv", P(gl::GetProgramInterfaceiv)},
+ {"glGetProgramInterfaceivRobustANGLE", P(gl::GetProgramInterfaceivRobustANGLE)},
+ {"glGetProgramPipelineInfoLog", P(gl::GetProgramPipelineInfoLog)},
+ {"glGetProgramPipelineiv", P(gl::GetProgramPipelineiv)},
+ {"glGetProgramResourceIndex", P(gl::GetProgramResourceIndex)},
+ {"glGetProgramResourceLocation", P(gl::GetProgramResourceLocation)},
+ {"glGetProgramResourceName", P(gl::GetProgramResourceName)},
+ {"glGetProgramResourceiv", P(gl::GetProgramResourceiv)},
+ {"glGetProgramiv", P(gl::GetProgramiv)},
+ {"glGetProgramivRobustANGLE", P(gl::GetProgramivRobustANGLE)},
+ {"glGetQueryObjecti64vEXT", P(gl::GetQueryObjecti64vEXT)},
+ {"glGetQueryObjecti64vRobustANGLE", P(gl::GetQueryObjecti64vRobustANGLE)},
+ {"glGetQueryObjectivEXT", P(gl::GetQueryObjectivEXT)},
+ {"glGetQueryObjectivRobustANGLE", P(gl::GetQueryObjectivRobustANGLE)},
+ {"glGetQueryObjectui64vEXT", P(gl::GetQueryObjectui64vEXT)},
+ {"glGetQueryObjectui64vRobustANGLE", P(gl::GetQueryObjectui64vRobustANGLE)},
+ {"glGetQueryObjectuiv", P(gl::GetQueryObjectuiv)},
+ {"glGetQueryObjectuivEXT", P(gl::GetQueryObjectuivEXT)},
+ {"glGetQueryObjectuivRobustANGLE", P(gl::GetQueryObjectuivRobustANGLE)},
+ {"glGetQueryiv", P(gl::GetQueryiv)},
+ {"glGetQueryivEXT", P(gl::GetQueryivEXT)},
+ {"glGetQueryivRobustANGLE", P(gl::GetQueryivRobustANGLE)},
+ {"glGetRenderbufferParameteriv", P(gl::GetRenderbufferParameteriv)},
+ {"glGetRenderbufferParameterivRobustANGLE", P(gl::GetRenderbufferParameterivRobustANGLE)},
+ {"glGetSamplerParameterIivRobustANGLE", P(gl::GetSamplerParameterIivRobustANGLE)},
+ {"glGetSamplerParameterIuivRobustANGLE", P(gl::GetSamplerParameterIuivRobustANGLE)},
+ {"glGetSamplerParameterfv", P(gl::GetSamplerParameterfv)},
+ {"glGetSamplerParameterfvRobustANGLE", P(gl::GetSamplerParameterfvRobustANGLE)},
+ {"glGetSamplerParameteriv", P(gl::GetSamplerParameteriv)},
+ {"glGetSamplerParameterivRobustANGLE", P(gl::GetSamplerParameterivRobustANGLE)},
+ {"glGetShaderInfoLog", P(gl::GetShaderInfoLog)},
+ {"glGetShaderPrecisionFormat", P(gl::GetShaderPrecisionFormat)},
+ {"glGetShaderSource", P(gl::GetShaderSource)},
+ {"glGetShaderiv", P(gl::GetShaderiv)},
+ {"glGetShaderivRobustANGLE", P(gl::GetShaderivRobustANGLE)},
+ {"glGetString", P(gl::GetString)},
+ {"glGetStringi", P(gl::GetStringi)},
+ {"glGetSynciv", P(gl::GetSynciv)},
+ {"glGetTexLevelParameterfv", P(gl::GetTexLevelParameterfv)},
+ {"glGetTexLevelParameterfvRobustANGLE", P(gl::GetTexLevelParameterfvRobustANGLE)},
+ {"glGetTexLevelParameteriv", P(gl::GetTexLevelParameteriv)},
+ {"glGetTexLevelParameterivRobustANGLE", P(gl::GetTexLevelParameterivRobustANGLE)},
+ {"glGetTexParameterIivRobustANGLE", P(gl::GetTexParameterIivRobustANGLE)},
+ {"glGetTexParameterIuivRobustANGLE", P(gl::GetTexParameterIuivRobustANGLE)},
+ {"glGetTexParameterfv", P(gl::GetTexParameterfv)},
+ {"glGetTexParameterfvRobustANGLE", P(gl::GetTexParameterfvRobustANGLE)},
+ {"glGetTexParameteriv", P(gl::GetTexParameteriv)},
+ {"glGetTexParameterivRobustANGLE", P(gl::GetTexParameterivRobustANGLE)},
+ {"glGetTransformFeedbackVarying", P(gl::GetTransformFeedbackVarying)},
+ {"glGetTranslatedShaderSourceANGLE", P(gl::GetTranslatedShaderSourceANGLE)},
+ {"glGetUniformBlockIndex", P(gl::GetUniformBlockIndex)},
+ {"glGetUniformIndices", P(gl::GetUniformIndices)},
+ {"glGetUniformLocation", P(gl::GetUniformLocation)},
+ {"glGetUniformfv", P(gl::GetUniformfv)},
+ {"glGetUniformfvRobustANGLE", P(gl::GetUniformfvRobustANGLE)},
+ {"glGetUniformiv", P(gl::GetUniformiv)},
+ {"glGetUniformivRobustANGLE", P(gl::GetUniformivRobustANGLE)},
+ {"glGetUniformuiv", P(gl::GetUniformuiv)},
+ {"glGetUniformuivRobustANGLE", P(gl::GetUniformuivRobustANGLE)},
+ {"glGetVertexAttribIiv", P(gl::GetVertexAttribIiv)},
+ {"glGetVertexAttribIivRobustANGLE", P(gl::GetVertexAttribIivRobustANGLE)},
+ {"glGetVertexAttribIuiv", P(gl::GetVertexAttribIuiv)},
+ {"glGetVertexAttribIuivRobustANGLE", P(gl::GetVertexAttribIuivRobustANGLE)},
+ {"glGetVertexAttribPointerv", P(gl::GetVertexAttribPointerv)},
+ {"glGetVertexAttribPointervRobustANGLE", P(gl::GetVertexAttribPointervRobustANGLE)},
+ {"glGetVertexAttribfv", P(gl::GetVertexAttribfv)},
+ {"glGetVertexAttribfvRobustANGLE", P(gl::GetVertexAttribfvRobustANGLE)},
+ {"glGetVertexAttribiv", P(gl::GetVertexAttribiv)},
+ {"glGetVertexAttribivRobustANGLE", P(gl::GetVertexAttribivRobustANGLE)},
+ {"glGetnUniformfvEXT", P(gl::GetnUniformfvEXT)},
+ {"glGetnUniformfvRobustANGLE", P(gl::GetnUniformfvRobustANGLE)},
+ {"glGetnUniformivEXT", P(gl::GetnUniformivEXT)},
+ {"glGetnUniformivRobustANGLE", P(gl::GetnUniformivRobustANGLE)},
+ {"glGetnUniformuivRobustANGLE", P(gl::GetnUniformuivRobustANGLE)},
+ {"glHint", P(gl::Hint)},
+ {"glInsertEventMarkerEXT", P(gl::InsertEventMarkerEXT)},
+ {"glInvalidateFramebuffer", P(gl::InvalidateFramebuffer)},
+ {"glInvalidateSubFramebuffer", P(gl::InvalidateSubFramebuffer)},
+ {"glIsBuffer", P(gl::IsBuffer)},
+ {"glIsEnabled", P(gl::IsEnabled)},
+ {"glIsFenceNV", P(gl::IsFenceNV)},
+ {"glIsFramebuffer", P(gl::IsFramebuffer)},
+ {"glIsProgram", P(gl::IsProgram)},
+ {"glIsProgramPipeline", P(gl::IsProgramPipeline)},
+ {"glIsQuery", P(gl::IsQuery)},
+ {"glIsQueryEXT", P(gl::IsQueryEXT)},
+ {"glIsRenderbuffer", P(gl::IsRenderbuffer)},
+ {"glIsSampler", P(gl::IsSampler)},
+ {"glIsShader", P(gl::IsShader)},
+ {"glIsSync", P(gl::IsSync)},
+ {"glIsTexture", P(gl::IsTexture)},
+ {"glIsTransformFeedback", P(gl::IsTransformFeedback)},
+ {"glIsVertexArray", P(gl::IsVertexArray)},
+ {"glIsVertexArrayOES", P(gl::IsVertexArrayOES)},
+ {"glLineWidth", P(gl::LineWidth)},
+ {"glLinkProgram", P(gl::LinkProgram)},
+ {"glMapBufferOES", P(gl::MapBufferOES)},
+ {"glMapBufferRange", P(gl::MapBufferRange)},
+ {"glMapBufferRangeEXT", P(gl::MapBufferRangeEXT)},
+ {"glMemoryBarrier", P(gl::MemoryBarrier)},
+ {"glMemoryBarrierByRegion", P(gl::MemoryBarrierByRegion)},
+ {"glObjectLabelKHR", P(gl::ObjectLabelKHR)},
+ {"glObjectPtrLabelKHR", P(gl::ObjectPtrLabelKHR)},
+ {"glPauseTransformFeedback", P(gl::PauseTransformFeedback)},
+ {"glPixelStorei", P(gl::PixelStorei)},
+ {"glPolygonOffset", P(gl::PolygonOffset)},
+ {"glPopDebugGroupKHR", P(gl::PopDebugGroupKHR)},
+ {"glPopGroupMarkerEXT", P(gl::PopGroupMarkerEXT)},
+ {"glProgramBinary", P(gl::ProgramBinary)},
+ {"glProgramBinaryOES", P(gl::ProgramBinaryOES)},
+ {"glProgramParameteri", P(gl::ProgramParameteri)},
+ {"glProgramUniform1f", P(gl::ProgramUniform1f)},
+ {"glProgramUniform1fv", P(gl::ProgramUniform1fv)},
+ {"glProgramUniform1i", P(gl::ProgramUniform1i)},
+ {"glProgramUniform1iv", P(gl::ProgramUniform1iv)},
+ {"glProgramUniform1ui", P(gl::ProgramUniform1ui)},
+ {"glProgramUniform1uiv", P(gl::ProgramUniform1uiv)},
+ {"glProgramUniform2f", P(gl::ProgramUniform2f)},
+ {"glProgramUniform2fv", P(gl::ProgramUniform2fv)},
+ {"glProgramUniform2i", P(gl::ProgramUniform2i)},
+ {"glProgramUniform2iv", P(gl::ProgramUniform2iv)},
+ {"glProgramUniform2ui", P(gl::ProgramUniform2ui)},
+ {"glProgramUniform2uiv", P(gl::ProgramUniform2uiv)},
+ {"glProgramUniform3f", P(gl::ProgramUniform3f)},
+ {"glProgramUniform3fv", P(gl::ProgramUniform3fv)},
+ {"glProgramUniform3i", P(gl::ProgramUniform3i)},
+ {"glProgramUniform3iv", P(gl::ProgramUniform3iv)},
+ {"glProgramUniform3ui", P(gl::ProgramUniform3ui)},
+ {"glProgramUniform3uiv", P(gl::ProgramUniform3uiv)},
+ {"glProgramUniform4f", P(gl::ProgramUniform4f)},
+ {"glProgramUniform4fv", P(gl::ProgramUniform4fv)},
+ {"glProgramUniform4i", P(gl::ProgramUniform4i)},
+ {"glProgramUniform4iv", P(gl::ProgramUniform4iv)},
+ {"glProgramUniform4ui", P(gl::ProgramUniform4ui)},
+ {"glProgramUniform4uiv", P(gl::ProgramUniform4uiv)},
+ {"glProgramUniformMatrix2fv", P(gl::ProgramUniformMatrix2fv)},
+ {"glProgramUniformMatrix2x3fv", P(gl::ProgramUniformMatrix2x3fv)},
+ {"glProgramUniformMatrix2x4fv", P(gl::ProgramUniformMatrix2x4fv)},
+ {"glProgramUniformMatrix3fv", P(gl::ProgramUniformMatrix3fv)},
+ {"glProgramUniformMatrix3x2fv", P(gl::ProgramUniformMatrix3x2fv)},
+ {"glProgramUniformMatrix3x4fv", P(gl::ProgramUniformMatrix3x4fv)},
+ {"glProgramUniformMatrix4fv", P(gl::ProgramUniformMatrix4fv)},
+ {"glProgramUniformMatrix4x2fv", P(gl::ProgramUniformMatrix4x2fv)},
+ {"glProgramUniformMatrix4x3fv", P(gl::ProgramUniformMatrix4x3fv)},
+ {"glPushDebugGroupKHR", P(gl::PushDebugGroupKHR)},
+ {"glPushGroupMarkerEXT", P(gl::PushGroupMarkerEXT)},
+ {"glQueryCounterEXT", P(gl::QueryCounterEXT)},
+ {"glReadBuffer", P(gl::ReadBuffer)},
+ {"glReadPixels", P(gl::ReadPixels)},
+ {"glReadPixelsRobustANGLE", P(gl::ReadPixelsRobustANGLE)},
+ {"glReadnPixelsEXT", P(gl::ReadnPixelsEXT)},
+ {"glReadnPixelsRobustANGLE", P(gl::ReadnPixelsRobustANGLE)},
+ {"glReleaseShaderCompiler", P(gl::ReleaseShaderCompiler)},
+ {"glRenderbufferStorage", P(gl::RenderbufferStorage)},
+ {"glRenderbufferStorageMultisample", P(gl::RenderbufferStorageMultisample)},
+ {"glRenderbufferStorageMultisampleANGLE", P(gl::RenderbufferStorageMultisampleANGLE)},
+ {"glRequestExtensionANGLE", P(gl::RequestExtensionANGLE)},
+ {"glResumeTransformFeedback", P(gl::ResumeTransformFeedback)},
+ {"glSampleCoverage", P(gl::SampleCoverage)},
+ {"glSampleMaski", P(gl::SampleMaski)},
+ {"glSamplerParameterIivRobustANGLE", P(gl::SamplerParameterIivRobustANGLE)},
+ {"glSamplerParameterIuivRobustANGLE", P(gl::SamplerParameterIuivRobustANGLE)},
+ {"glSamplerParameterf", P(gl::SamplerParameterf)},
+ {"glSamplerParameterfv", P(gl::SamplerParameterfv)},
+ {"glSamplerParameterfvRobustANGLE", P(gl::SamplerParameterfvRobustANGLE)},
+ {"glSamplerParameteri", P(gl::SamplerParameteri)},
+ {"glSamplerParameteriv", P(gl::SamplerParameteriv)},
+ {"glSamplerParameterivRobustANGLE", P(gl::SamplerParameterivRobustANGLE)},
+ {"glScissor", P(gl::Scissor)},
+ {"glSetFenceNV", P(gl::SetFenceNV)},
+ {"glShaderBinary", P(gl::ShaderBinary)},
+ {"glShaderSource", P(gl::ShaderSource)},
+ {"glStencilFunc", P(gl::StencilFunc)},
+ {"glStencilFuncSeparate", P(gl::StencilFuncSeparate)},
+ {"glStencilMask", P(gl::StencilMask)},
+ {"glStencilMaskSeparate", P(gl::StencilMaskSeparate)},
+ {"glStencilOp", P(gl::StencilOp)},
+ {"glStencilOpSeparate", P(gl::StencilOpSeparate)},
+ {"glTestFenceNV", P(gl::TestFenceNV)},
+ {"glTexImage2D", P(gl::TexImage2D)},
+ {"glTexImage2DRobustANGLE", P(gl::TexImage2DRobustANGLE)},
+ {"glTexImage3D", P(gl::TexImage3D)},
+ {"glTexImage3DRobustANGLE", P(gl::TexImage3DRobustANGLE)},
+ {"glTexParameterIivRobustANGLE", P(gl::TexParameterIivRobustANGLE)},
+ {"glTexParameterIuivRobustANGLE", P(gl::TexParameterIuivRobustANGLE)},
+ {"glTexParameterf", P(gl::TexParameterf)},
+ {"glTexParameterfv", P(gl::TexParameterfv)},
+ {"glTexParameterfvRobustANGLE", P(gl::TexParameterfvRobustANGLE)},
+ {"glTexParameteri", P(gl::TexParameteri)},
+ {"glTexParameteriv", P(gl::TexParameteriv)},
+ {"glTexParameterivRobustANGLE", P(gl::TexParameterivRobustANGLE)},
+ {"glTexStorage2D", P(gl::TexStorage2D)},
+ {"glTexStorage2DEXT", P(gl::TexStorage2DEXT)},
+ {"glTexStorage2DMultisample", P(gl::TexStorage2DMultisample)},
+ {"glTexStorage3D", P(gl::TexStorage3D)},
+ {"glTexSubImage2D", P(gl::TexSubImage2D)},
+ {"glTexSubImage2DRobustANGLE", P(gl::TexSubImage2DRobustANGLE)},
+ {"glTexSubImage3D", P(gl::TexSubImage3D)},
+ {"glTexSubImage3DRobustANGLE", P(gl::TexSubImage3DRobustANGLE)},
+ {"glTransformFeedbackVaryings", P(gl::TransformFeedbackVaryings)},
+ {"glUniform1f", P(gl::Uniform1f)},
+ {"glUniform1fv", P(gl::Uniform1fv)},
+ {"glUniform1i", P(gl::Uniform1i)},
+ {"glUniform1iv", P(gl::Uniform1iv)},
+ {"glUniform1ui", P(gl::Uniform1ui)},
+ {"glUniform1uiv", P(gl::Uniform1uiv)},
+ {"glUniform2f", P(gl::Uniform2f)},
+ {"glUniform2fv", P(gl::Uniform2fv)},
+ {"glUniform2i", P(gl::Uniform2i)},
+ {"glUniform2iv", P(gl::Uniform2iv)},
+ {"glUniform2ui", P(gl::Uniform2ui)},
+ {"glUniform2uiv", P(gl::Uniform2uiv)},
+ {"glUniform3f", P(gl::Uniform3f)},
+ {"glUniform3fv", P(gl::Uniform3fv)},
+ {"glUniform3i", P(gl::Uniform3i)},
+ {"glUniform3iv", P(gl::Uniform3iv)},
+ {"glUniform3ui", P(gl::Uniform3ui)},
+ {"glUniform3uiv", P(gl::Uniform3uiv)},
+ {"glUniform4f", P(gl::Uniform4f)},
+ {"glUniform4fv", P(gl::Uniform4fv)},
+ {"glUniform4i", P(gl::Uniform4i)},
+ {"glUniform4iv", P(gl::Uniform4iv)},
+ {"glUniform4ui", P(gl::Uniform4ui)},
+ {"glUniform4uiv", P(gl::Uniform4uiv)},
+ {"glUniformBlockBinding", P(gl::UniformBlockBinding)},
+ {"glUniformMatrix2fv", P(gl::UniformMatrix2fv)},
+ {"glUniformMatrix2x3fv", P(gl::UniformMatrix2x3fv)},
+ {"glUniformMatrix2x4fv", P(gl::UniformMatrix2x4fv)},
+ {"glUniformMatrix3fv", P(gl::UniformMatrix3fv)},
+ {"glUniformMatrix3x2fv", P(gl::UniformMatrix3x2fv)},
+ {"glUniformMatrix3x4fv", P(gl::UniformMatrix3x4fv)},
+ {"glUniformMatrix4fv", P(gl::UniformMatrix4fv)},
+ {"glUniformMatrix4x2fv", P(gl::UniformMatrix4x2fv)},
+ {"glUniformMatrix4x3fv", P(gl::UniformMatrix4x3fv)},
+ {"glUnmapBuffer", P(gl::UnmapBuffer)},
+ {"glUnmapBufferOES", P(gl::UnmapBufferOES)},
+ {"glUseProgram", P(gl::UseProgram)},
+ {"glUseProgramStages", P(gl::UseProgramStages)},
+ {"glValidateProgram", P(gl::ValidateProgram)},
+ {"glValidateProgramPipeline", P(gl::ValidateProgramPipeline)},
+ {"glVertexAttrib1f", P(gl::VertexAttrib1f)},
+ {"glVertexAttrib1fv", P(gl::VertexAttrib1fv)},
+ {"glVertexAttrib2f", P(gl::VertexAttrib2f)},
+ {"glVertexAttrib2fv", P(gl::VertexAttrib2fv)},
+ {"glVertexAttrib3f", P(gl::VertexAttrib3f)},
+ {"glVertexAttrib3fv", P(gl::VertexAttrib3fv)},
+ {"glVertexAttrib4f", P(gl::VertexAttrib4f)},
+ {"glVertexAttrib4fv", P(gl::VertexAttrib4fv)},
+ {"glVertexAttribBinding", P(gl::VertexAttribBinding)},
+ {"glVertexAttribDivisor", P(gl::VertexAttribDivisor)},
+ {"glVertexAttribDivisorANGLE", P(gl::VertexAttribDivisorANGLE)},
+ {"glVertexAttribFormat", P(gl::VertexAttribFormat)},
+ {"glVertexAttribI4i", P(gl::VertexAttribI4i)},
+ {"glVertexAttribI4iv", P(gl::VertexAttribI4iv)},
+ {"glVertexAttribI4ui", P(gl::VertexAttribI4ui)},
+ {"glVertexAttribI4uiv", P(gl::VertexAttribI4uiv)},
+ {"glVertexAttribIFormat", P(gl::VertexAttribIFormat)},
+ {"glVertexAttribIPointer", P(gl::VertexAttribIPointer)},
+ {"glVertexAttribPointer", P(gl::VertexAttribPointer)},
+ {"glVertexBindingDivisor", P(gl::VertexBindingDivisor)},
+ {"glViewport", P(gl::Viewport)},
+ {"glWaitSync", P(gl::WaitSync)}};
+
+size_t g_numProcs = 516;
+} // namespace egl
diff --git a/src/3rdparty/angle/src/libGLESv2/proc_table_data.json b/src/3rdparty/angle/src/libGLESv2/proc_table_data.json
new file mode 100644
index 0000000000..5ce1d433a8
--- /dev/null
+++ b/src/3rdparty/angle/src/libGLESv2/proc_table_data.json
@@ -0,0 +1,662 @@
+{
+ "GLES2 core": [
+ "glActiveTexture",
+ "glAttachShader",
+ "glBindAttribLocation",
+ "glBindBuffer",
+ "glBindFramebuffer",
+ "glBindRenderbuffer",
+ "glBindTexture",
+ "glBlendColor",
+ "glBlendEquation",
+ "glBlendEquationSeparate",
+ "glBlendFunc",
+ "glBlendFuncSeparate",
+ "glBufferData",
+ "glBufferSubData",
+ "glCheckFramebufferStatus",
+ "glClear",
+ "glClearColor",
+ "glClearDepthf",
+ "glClearStencil",
+ "glCompileShader",
+ "glColorMask",
+ "glCompressedTexImage2D",
+ "glCompressedTexSubImage2D",
+ "glCopyTexImage2D",
+ "glCopyTexSubImage2D",
+ "glCreateProgram",
+ "glCreateShader",
+ "glCullFace",
+ "glDeleteBuffers",
+ "glDeleteFramebuffers",
+ "glDeleteProgram",
+ "glDeleteRenderbuffers",
+ "glDeleteShader",
+ "glDeleteTextures",
+ "glDepthFunc",
+ "glDepthMask",
+ "glDepthRangef",
+ "glDetachShader",
+ "glDisable",
+ "glDisableVertexAttribArray",
+ "glDrawArrays",
+ "glDrawElements",
+ "glEnable",
+ "glEnableVertexAttribArray",
+ "glFinish",
+ "glFlush",
+ "glFramebufferRenderbuffer",
+ "glFramebufferTexture2D",
+ "glFrontFace",
+ "glGenBuffers",
+ "glGenerateMipmap",
+ "glGenFramebuffers",
+ "glGenRenderbuffers",
+ "glGenTextures",
+ "glGetActiveAttrib",
+ "glGetActiveUniform",
+ "glGetAttachedShaders",
+ "glGetAttribLocation",
+ "glGetBooleanv",
+ "glGetBufferParameteriv",
+ "glGetError",
+ "glGetFloatv",
+ "glGetFramebufferAttachmentParameteriv",
+ "glGetIntegerv",
+ "glGetProgramiv",
+ "glGetProgramInfoLog",
+ "glGetRenderbufferParameteriv",
+ "glGetShaderiv",
+ "glGetShaderInfoLog",
+ "glGetShaderPrecisionFormat",
+ "glGetShaderSource",
+ "glGetString",
+ "glGetTexParameterfv",
+ "glGetTexParameteriv",
+ "glGetUniformfv",
+ "glGetUniformiv",
+ "glGetUniformLocation",
+ "glGetVertexAttribfv",
+ "glGetVertexAttribiv",
+ "glGetVertexAttribPointerv",
+ "glHint",
+ "glIsBuffer",
+ "glIsEnabled",
+ "glIsFramebuffer",
+ "glIsProgram",
+ "glIsRenderbuffer",
+ "glIsShader",
+ "glIsTexture",
+ "glLineWidth",
+ "glLinkProgram",
+ "glPixelStorei",
+ "glPolygonOffset",
+ "glReadPixels",
+ "glReleaseShaderCompiler",
+ "glRenderbufferStorage",
+ "glSampleCoverage",
+ "glScissor",
+ "glShaderBinary",
+ "glShaderSource",
+ "glStencilFunc",
+ "glStencilFuncSeparate",
+ "glStencilMask",
+ "glStencilMaskSeparate",
+ "glStencilOp",
+ "glStencilOpSeparate",
+ "glTexImage2D",
+ "glTexParameterf",
+ "glTexParameterfv",
+ "glTexParameteri",
+ "glTexParameteriv",
+ "glTexSubImage2D",
+ "glUniform1f",
+ "glUniform1fv",
+ "glUniform1i",
+ "glUniform1iv",
+ "glUniform2f",
+ "glUniform2fv",
+ "glUniform2i",
+ "glUniform2iv",
+ "glUniform3f",
+ "glUniform3fv",
+ "glUniform3i",
+ "glUniform3iv",
+ "glUniform4f",
+ "glUniform4fv",
+ "glUniform4i",
+ "glUniform4iv",
+ "glUniformMatrix2fv",
+ "glUniformMatrix3fv",
+ "glUniformMatrix4fv",
+ "glUseProgram",
+ "glValidateProgram",
+ "glVertexAttrib1f",
+ "glVertexAttrib1fv",
+ "glVertexAttrib2f",
+ "glVertexAttrib2fv",
+ "glVertexAttrib3f",
+ "glVertexAttrib3fv",
+ "glVertexAttrib4f",
+ "glVertexAttrib4fv",
+ "glVertexAttribPointer",
+ "glViewport"
+ ],
+
+ "GL_ANGLE_framebuffer_blit": [
+ "glBlitFramebufferANGLE"
+ ],
+
+ "GL_ANGLE_framebuffer_multisample": [
+ "glRenderbufferStorageMultisampleANGLE"
+ ],
+
+ "GL_EXT_discard_framebuffer": [
+ "glDiscardFramebufferEXT"
+ ],
+
+ "GL_NV_fence": [
+ "glDeleteFencesNV",
+ "glGenFencesNV",
+ "glIsFenceNV",
+ "glTestFenceNV",
+ "glGetFenceivNV",
+ "glFinishFenceNV",
+ "glSetFenceNV"
+ ],
+
+ "GL_ANGLE_translated_shader_source": [
+ "glGetTranslatedShaderSourceANGLE"
+ ],
+
+ "GL_EXT_texture_storage": [
+ "glTexStorage2DEXT"
+ ],
+
+ "GL_EXT_robustness": [
+ "glGetGraphicsResetStatusEXT",
+ "glReadnPixelsEXT",
+ "glGetnUniformfvEXT",
+ "glGetnUniformivEXT"
+ ],
+
+ "GL_EXT_occlusion_query_boolean": [
+ "glGenQueriesEXT",
+ "glDeleteQueriesEXT",
+ "glIsQueryEXT",
+ "glBeginQueryEXT",
+ "glEndQueryEXT",
+ "glGetQueryivEXT",
+ "glGetQueryObjectuivEXT"
+ ],
+
+ "GL_EXT_disjoint_timer_query": [
+ "glGenQueriesEXT",
+ "glDeleteQueriesEXT",
+ "glIsQueryEXT",
+ "glBeginQueryEXT",
+ "glEndQueryEXT",
+ "glQueryCounterEXT",
+ "glGetQueryivEXT",
+ "glGetQueryObjectivEXT",
+ "glGetQueryObjectuivEXT",
+ "glGetQueryObjecti64vEXT",
+ "glGetQueryObjectui64vEXT"
+ ],
+
+ "GL_EXT_draw_buffers": [
+ "glDrawBuffersEXT"
+ ],
+
+ "GL_ANGLE_instanced_arrays": [
+ "glDrawArraysInstancedANGLE",
+ "glDrawElementsInstancedANGLE",
+ "glVertexAttribDivisorANGLE"
+ ],
+
+ "GL_OES_get_program_binary": [
+ "glGetProgramBinaryOES",
+ "glProgramBinaryOES"
+ ],
+
+ "GL_OES_mapbuffer": [
+ "glMapBufferOES",
+ "glUnmapBufferOES",
+ "glGetBufferPointervOES"
+ ],
+
+ "GL_EXT_map_buffer_range": [
+ "glMapBufferRangeEXT",
+ "glFlushMappedBufferRangeEXT"
+ ],
+
+ "GL_EXT_debug_marker": [
+ "glInsertEventMarkerEXT",
+ "glPushGroupMarkerEXT",
+ "glPopGroupMarkerEXT"
+ ],
+
+ "GL_OES_EGL_image": [
+ "glEGLImageTargetTexture2DOES",
+ "glEGLImageTargetRenderbufferStorageOES"
+ ],
+
+ "GL_OES_vertex_array_object": [
+ "glBindVertexArrayOES",
+ "glDeleteVertexArraysOES",
+ "glGenVertexArraysOES",
+ "glIsVertexArrayOES"
+ ],
+
+ "GL_KHR_debug": [
+ "glDebugMessageControlKHR",
+ "glDebugMessageInsertKHR",
+ "glDebugMessageCallbackKHR",
+ "glGetDebugMessageLogKHR",
+ "glPushDebugGroupKHR",
+ "glPopDebugGroupKHR",
+ "glObjectLabelKHR",
+ "glGetObjectLabelKHR",
+ "glObjectPtrLabelKHR",
+ "glGetObjectPtrLabelKHR",
+ "glGetPointervKHR"
+ ],
+
+ "GL_CHROMIUM_bind_uniform_location": [
+ "glBindUniformLocationCHROMIUM"
+ ],
+
+ "GL_CHROMIUM_copy_texture": [
+ "glCopyTextureCHROMIUM",
+ "glCopySubTextureCHROMIUM"
+ ],
+
+ "GL_CHROMIUM_copy_compressed_texture": [
+ "glCompressedCopyTextureCHROMIUM"
+ ],
+
+ "GL_ANGLE_request_extension": [
+ "glRequestExtensionANGLE"
+ ],
+
+ "GL_ANGLE_robust_client_memory": [
+ "glGetBooleanvRobustANGLE",
+ "glGetBufferParameterivRobustANGLE",
+ "glGetFloatvRobustANGLE",
+ "glGetFramebufferAttachmentParameterivRobustANGLE",
+ "glGetIntegervRobustANGLE",
+ "glGetProgramivRobustANGLE",
+ "glGetRenderbufferParameterivRobustANGLE",
+ "glGetShaderivRobustANGLE",
+ "glGetTexParameterfvRobustANGLE",
+ "glGetTexParameterivRobustANGLE",
+ "glGetUniformfvRobustANGLE",
+ "glGetUniformivRobustANGLE",
+ "glGetVertexAttribfvRobustANGLE",
+ "glGetVertexAttribivRobustANGLE",
+ "glGetVertexAttribPointervRobustANGLE",
+ "glReadPixelsRobustANGLE",
+ "glTexImage2DRobustANGLE",
+ "glTexParameterfvRobustANGLE",
+ "glTexParameterivRobustANGLE",
+ "glTexSubImage2DRobustANGLE",
+ "glTexImage3DRobustANGLE",
+ "glTexSubImage3DRobustANGLE",
+ "glCompressedTexImage2DRobustANGLE",
+ "glCompressedTexSubImage2DRobustANGLE",
+ "glCompressedTexImage3DRobustANGLE",
+ "glCompressedTexSubImage3DRobustANGLE",
+ "glGetQueryivRobustANGLE",
+ "glGetQueryObjectuivRobustANGLE",
+ "glGetBufferPointervRobustANGLE",
+ "glGetIntegeri_vRobustANGLE",
+ "glGetInternalformativRobustANGLE",
+ "glGetVertexAttribIivRobustANGLE",
+ "glGetVertexAttribIuivRobustANGLE",
+ "glGetUniformuivRobustANGLE",
+ "glGetActiveUniformBlockivRobustANGLE",
+ "glGetInteger64vRobustANGLE",
+ "glGetInteger64i_vRobustANGLE",
+ "glGetBufferParameteri64vRobustANGLE",
+ "glSamplerParameterivRobustANGLE",
+ "glSamplerParameterfvRobustANGLE",
+ "glGetSamplerParameterivRobustANGLE",
+ "glGetSamplerParameterfvRobustANGLE",
+ "glGetFramebufferParameterivRobustANGLE",
+ "glGetProgramInterfaceivRobustANGLE",
+ "glGetBooleani_vRobustANGLE",
+ "glGetMultisamplefvRobustANGLE",
+ "glGetTexLevelParameterivRobustANGLE",
+ "glGetTexLevelParameterfvRobustANGLE",
+ "glGetPointervRobustANGLERobustANGLE",
+ "glReadnPixelsRobustANGLE",
+ "glGetnUniformfvRobustANGLE",
+ "glGetnUniformivRobustANGLE",
+ "glGetnUniformuivRobustANGLE",
+ "glTexParameterIivRobustANGLE",
+ "glTexParameterIuivRobustANGLE",
+ "glGetTexParameterIivRobustANGLE",
+ "glGetTexParameterIuivRobustANGLE",
+ "glSamplerParameterIivRobustANGLE",
+ "glSamplerParameterIuivRobustANGLE",
+ "glGetSamplerParameterIivRobustANGLE",
+ "glGetSamplerParameterIuivRobustANGLE",
+ "glGetQueryObjectivRobustANGLE",
+ "glGetQueryObjecti64vRobustANGLE",
+ "glGetQueryObjectui64vRobustANGLE"
+ ],
+
+ "GL_ANGLE_multiview": [
+ "glFramebufferTextureMultiviewLayeredANGLE",
+ "glFramebufferTextureMultiviewSideBySideANGLE"
+ ],
+
+ "GLES3 core": [
+ "glReadBuffer",
+ "glDrawRangeElements",
+ "glTexImage3D",
+ "glTexSubImage3D",
+ "glCopyTexSubImage3D",
+ "glCompressedTexImage3D",
+ "glCompressedTexSubImage3D",
+ "glGenQueries",
+ "glDeleteQueries",
+ "glIsQuery",
+ "glBeginQuery",
+ "glEndQuery",
+ "glGetQueryiv",
+ "glGetQueryObjectuiv",
+ "glUnmapBuffer",
+ "glGetBufferPointerv",
+ "glDrawBuffers",
+ "glUniformMatrix2x3fv",
+ "glUniformMatrix3x2fv",
+ "glUniformMatrix2x4fv",
+ "glUniformMatrix4x2fv",
+ "glUniformMatrix3x4fv",
+ "glUniformMatrix4x3fv",
+ "glBlitFramebuffer",
+ "glRenderbufferStorageMultisample",
+ "glFramebufferTextureLayer",
+ "glMapBufferRange",
+ "glFlushMappedBufferRange",
+ "glBindVertexArray",
+ "glDeleteVertexArrays",
+ "glGenVertexArrays",
+ "glIsVertexArray",
+ "glGetIntegeri_v",
+ "glBeginTransformFeedback",
+ "glEndTransformFeedback",
+ "glBindBufferRange",
+ "glBindBufferBase",
+ "glTransformFeedbackVaryings",
+ "glGetTransformFeedbackVarying",
+ "glVertexAttribIPointer",
+ "glGetVertexAttribIiv",
+ "glGetVertexAttribIuiv",
+ "glVertexAttribI4i",
+ "glVertexAttribI4ui",
+ "glVertexAttribI4iv",
+ "glVertexAttribI4uiv",
+ "glGetUniformuiv",
+ "glGetFragDataLocation",
+ "glUniform1ui",
+ "glUniform2ui",
+ "glUniform3ui",
+ "glUniform4ui",
+ "glUniform1uiv",
+ "glUniform2uiv",
+ "glUniform3uiv",
+ "glUniform4uiv",
+ "glClearBufferiv",
+ "glClearBufferuiv",
+ "glClearBufferfv",
+ "glClearBufferfi",
+ "glGetStringi",
+ "glCopyBufferSubData",
+ "glGetUniformIndices",
+ "glGetActiveUniformsiv",
+ "glGetUniformBlockIndex",
+ "glGetActiveUniformBlockiv",
+ "glGetActiveUniformBlockName",
+ "glUniformBlockBinding",
+ "glDrawArraysInstanced",
+ "glDrawElementsInstanced",
+ "glFenceSync",
+ "glIsSync",
+ "glDeleteSync",
+ "glClientWaitSync",
+ "glWaitSync",
+ "glGetInteger64v",
+ "glGetSynciv",
+ "glGetInteger64i_v",
+ "glGetBufferParameteri64v",
+ "glGenSamplers",
+ "glDeleteSamplers",
+ "glIsSampler",
+ "glBindSampler",
+ "glSamplerParameteri",
+ "glSamplerParameteriv",
+ "glSamplerParameterf",
+ "glSamplerParameterfv",
+ "glGetSamplerParameteriv",
+ "glGetSamplerParameterfv",
+ "glVertexAttribDivisor",
+ "glBindTransformFeedback",
+ "glDeleteTransformFeedbacks",
+ "glGenTransformFeedbacks",
+ "glIsTransformFeedback",
+ "glPauseTransformFeedback",
+ "glResumeTransformFeedback",
+ "glGetProgramBinary",
+ "glProgramBinary",
+ "glProgramParameteri",
+ "glInvalidateFramebuffer",
+ "glInvalidateSubFramebuffer",
+ "glTexStorage2D",
+ "glTexStorage3D",
+ "glGetInternalformativ"
+ ],
+
+ "GLES31 core": [
+ "glDispatchCompute",
+ "glDispatchComputeIndirect",
+ "glDrawArraysIndirect",
+ "glDrawElementsIndirect",
+ "glFramebufferParameteri",
+ "glGetFramebufferParameteriv",
+ "glGetProgramInterfaceiv",
+ "glGetProgramResourceIndex",
+ "glGetProgramResourceName",
+ "glGetProgramResourceiv",
+ "glGetProgramResourceLocation",
+ "glUseProgramStages",
+ "glActiveShaderProgram",
+ "glCreateShaderProgramv",
+ "glBindProgramPipeline",
+ "glDeleteProgramPipelines",
+ "glGenProgramPipelines",
+ "glIsProgramPipeline",
+ "glGetProgramPipelineiv",
+ "glProgramUniform1i",
+ "glProgramUniform2i",
+ "glProgramUniform3i",
+ "glProgramUniform4i",
+ "glProgramUniform1ui",
+ "glProgramUniform2ui",
+ "glProgramUniform3ui",
+ "glProgramUniform4ui",
+ "glProgramUniform1f",
+ "glProgramUniform2f",
+ "glProgramUniform3f",
+ "glProgramUniform4f",
+ "glProgramUniform1iv",
+ "glProgramUniform2iv",
+ "glProgramUniform3iv",
+ "glProgramUniform4iv",
+ "glProgramUniform1uiv",
+ "glProgramUniform2uiv",
+ "glProgramUniform3uiv",
+ "glProgramUniform4uiv",
+ "glProgramUniform1fv",
+ "glProgramUniform2fv",
+ "glProgramUniform3fv",
+ "glProgramUniform4fv",
+ "glProgramUniformMatrix2fv",
+ "glProgramUniformMatrix3fv",
+ "glProgramUniformMatrix4fv",
+ "glProgramUniformMatrix2x3fv",
+ "glProgramUniformMatrix3x2fv",
+ "glProgramUniformMatrix2x4fv",
+ "glProgramUniformMatrix4x2fv",
+ "glProgramUniformMatrix3x4fv",
+ "glProgramUniformMatrix4x3fv",
+ "glValidateProgramPipeline",
+ "glGetProgramPipelineInfoLog",
+ "glBindImageTexture",
+ "glGetBooleani_v",
+ "glMemoryBarrier",
+ "glMemoryBarrierByRegion",
+ "glTexStorage2DMultisample",
+ "glGetMultisamplefv",
+ "glSampleMaski",
+ "glGetTexLevelParameteriv",
+ "glGetTexLevelParameterfv",
+ "glBindVertexBuffer",
+ "glVertexAttribFormat",
+ "glVertexAttribIFormat",
+ "glVertexAttribBinding",
+ "glVertexBindingDivisor"
+ ],
+
+ "EGL 1.0": [
+ "eglChooseConfig",
+ "eglCopyBuffers",
+ "eglCreateContext",
+ "eglCreatePbufferSurface",
+ "eglCreatePixmapSurface",
+ "eglCreateWindowSurface",
+ "eglDestroyContext",
+ "eglDestroySurface",
+ "eglGetConfigAttrib",
+ "eglGetConfigs",
+ "eglGetCurrentDisplay",
+ "eglGetCurrentSurface",
+ "eglGetDisplay",
+ "eglGetError",
+ "eglGetProcAddress",
+ "eglInitialize",
+ "eglMakeCurrent",
+ "eglQueryContext",
+ "eglQueryString",
+ "eglQuerySurface",
+ "eglSwapBuffers",
+ "eglTerminate",
+ "eglWaitGL",
+ "eglWaitNative"
+ ],
+
+ "EGL 1.1": [
+ "eglBindTexImage",
+ "eglReleaseTexImage",
+ "eglSurfaceAttrib",
+ "eglSwapInterval"
+ ],
+
+ "EGL 1.2": [
+ "eglBindAPI",
+ "eglQueryAPI",
+ "eglCreatePbufferFromClientBuffer",
+ "eglReleaseThread",
+ "eglWaitClient"
+ ],
+
+ "EGL 1.4": [
+ "eglGetCurrentContext"
+ ],
+
+ "EGL 1.5": [
+ "eglCreateSync",
+ "eglDestroySync",
+ "eglClientWaitSync",
+ "eglGetSyncAttrib",
+ "eglCreateImage",
+ "eglDestroyImage",
+ "eglGetPlatformDisplay",
+ "eglCreatePlatformWindowSurface",
+ "eglCreatePlatformPixmapSurface",
+ "eglWaitSync"
+ ],
+
+ "EGL_ANGLE_query_surface_pointer": [
+ "eglQuerySurfacePointerANGLE"
+ ],
+
+ "EGL_NV_post_sub_buffer": [
+ "eglPostSubBufferNV"
+ ],
+
+ "EGL_EXT_platform_base": [
+ "eglGetPlatformDisplayEXT"
+ ],
+
+ "EGL_EXT_device_query": [
+ "eglQueryDisplayAttribEXT",
+ "eglQueryDeviceAttribEXT",
+ "eglQueryDeviceStringEXT"
+ ],
+
+ "EGL_KHR_image_base/EGL_KHR_image": [
+ "eglCreateImageKHR",
+ "eglDestroyImageKHR"
+ ],
+
+ "EGL_EXT_device_creation": [
+ "eglCreateDeviceANGLE",
+ "eglReleaseDeviceANGLE"
+ ],
+
+ "EGL_KHR_stream": [
+ "eglCreateStreamKHR",
+ "eglDestroyStreamKHR",
+ "eglStreamAttribKHR",
+ "eglQueryStreamKHR",
+ "eglQueryStreamu64KHR"
+ ],
+
+ "EGL_KHR_stream_consumer_gltexture": [
+ "eglStreamConsumerGLTextureExternalKHR",
+ "eglStreamConsumerAcquireKHR",
+ "eglStreamConsumerReleaseKHR"
+ ],
+
+ "EGL_NV_stream_consumer_gltexture_yuv": [
+ "eglStreamConsumerGLTextureExternalAttribsNV"
+ ],
+
+ "EGL_ANGLE_stream_producer_d3d_texture_nv12": [
+ "eglCreateStreamProducerD3DTextureNV12ANGLE",
+ "eglStreamPostD3DTextureNV12ANGLE"
+ ],
+
+ "EGL_CHROMIUM_get_sync_values": [
+ "eglGetSyncValuesCHROMIUM"
+ ],
+
+ "EGL_EXT_swap_buffers_with_damage": [
+ "eglSwapBuffersWithDamageEXT"
+ ],
+
+ "EGL_ANGLE_program_cache_control": [
+ "eglProgramCacheGetAttribANGLE",
+ "eglProgramCacheQueryANGLE",
+ "eglProgramCachePopulateANGLE",
+ "eglProgramCacheResizeANGLE"
+ ],
+
+ "angle::Platform related entry points": [
+ "ANGLEGetDisplayPlatform",
+ "ANGLEResetDisplayPlatform"
+ ]
+}