diff options
Diffstat (limited to 'src/3rdparty/angle/src/libGLESv2')
27 files changed, 14639 insertions, 10240 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 ¤tValueData = 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 ¤tValueData = 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 ¤tValueData = 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 ¤tValueData = 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 index 5a4966f66d..2ff4cc0579 100644 --- a/src/3rdparty/angle/src/libGLESv2/libGLESv2d_mingw32.def +++ b/src/3rdparty/angle/src/libGLESv2/libGLESv2d_mingw32.def @@ -1,316 +1,412 @@ -LIBRARY libGLESv2d +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/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" + ] +} |