Implement EGL_ANGLE_explicit_context
Implementation of EGL_ANGLE_explicit_context. Includes new libGLESv2 entry
points and exports, libANGLE entry points, extension declarations for
eglGetProcAddress, and unit tests. Autogeneration scripts have been
modified to produce entry points, exports, eglGetProcAddress function
table, extension function pointers, and function declarations.
Bug:angleproject:1395
Change-Id: I1b79c6069bbed05beb4700a32139a64ddc465c4c
Reviewed-on: https://chromium-review.googlesource.com/1039865
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/Context.cpp b/src/libANGLE/Context.cpp
index 54bc41d..1441f71 100644
--- a/src/libANGLE/Context.cpp
+++ b/src/libANGLE/Context.cpp
@@ -265,7 +265,8 @@
TextureManager *shareTextures,
MemoryProgramCache *memoryProgramCache,
const egl::AttributeMap &attribs,
- const egl::DisplayExtensions &displayExtensions)
+ const egl::DisplayExtensions &displayExtensions,
+ const egl::ClientExtensions &clientExtensions)
: mState(reinterpret_cast<ContextID>(this),
shareContext ? &shareContext->mState : nullptr,
shareTextures,
@@ -304,7 +305,7 @@
mImplementation->setMemoryProgramCache(memoryProgramCache);
bool robustResourceInit = GetRobustResourceInit(attribs);
- initCaps(displayExtensions, robustResourceInit);
+ initCaps(displayExtensions, clientExtensions, robustResourceInit);
initWorkarounds();
mGLState.initialize(this, GetDebug(attribs), GetBindGeneratesResource(attribs),
@@ -3020,6 +3021,7 @@
}
Extensions Context::generateSupportedExtensions(const egl::DisplayExtensions &displayExtensions,
+ const egl::ClientExtensions &clientExtensions,
bool robustResourceInit) const
{
Extensions supportedExtensions = mImplementation->getNativeExtensions();
@@ -3087,14 +3089,26 @@
// Enable the cache control query unconditionally.
supportedExtensions.programCacheControl = true;
+ // Enable EGL_ANGLE_explicit_context subextensions
+ if (clientExtensions.explicitContext)
+ {
+ // GL_ANGLE_explicit_context_gles1
+ supportedExtensions.explicitContextGles1 = true;
+ // GL_ANGLE_explicit_context
+ supportedExtensions.explicitContext = true;
+ }
+
return supportedExtensions;
}
-void Context::initCaps(const egl::DisplayExtensions &displayExtensions, bool robustResourceInit)
+void Context::initCaps(const egl::DisplayExtensions &displayExtensions,
+ const egl::ClientExtensions &clientExtensions,
+ bool robustResourceInit)
{
mCaps = mImplementation->getNativeCaps();
- mSupportedExtensions = generateSupportedExtensions(displayExtensions, robustResourceInit);
+ mSupportedExtensions =
+ generateSupportedExtensions(displayExtensions, clientExtensions, robustResourceInit);
mExtensions = mSupportedExtensions;
mLimitations = mImplementation->getNativeLimitations();