Add an extension to disable resource generation on bind.
BUG=angleproject:1518
Change-Id: I662f7b07da5c97831496f2617b0adadf9858bdc9
Reviewed-on: https://chromium-review.googlesource.com/386799
Reviewed-by: Antoine Labour <piman@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/Context.cpp b/src/libANGLE/Context.cpp
index 48e3933..1ed648c 100644
--- a/src/libANGLE/Context.cpp
+++ b/src/libANGLE/Context.cpp
@@ -184,6 +184,11 @@
return (attribs.get(EGL_CONTEXT_WEBGL_COMPATIBILITY_ANGLE, EGL_FALSE) == EGL_TRUE);
}
+bool GetBindGeneratesResource(const egl::AttributeMap &attribs)
+{
+ return (attribs.get(EGL_CONTEXT_BIND_GENERATES_RESOURCE_CHROMIUM, EGL_TRUE) == EGL_TRUE);
+}
+
std::string GetObjectLabelFromPointer(GLsizei length, const GLchar *label)
{
std::string labelName;
@@ -251,7 +256,8 @@
initCaps(GetWebGLContext(attribs));
- mGLState.initialize(mCaps, mExtensions, mClientMajorVersion, GetDebug(attribs));
+ mGLState.initialize(mCaps, mExtensions, mClientMajorVersion, GetDebug(attribs),
+ GetBindGeneratesResource(attribs));
mFenceNVHandleAllocator.setBaseHandle(0);
@@ -2080,13 +2086,36 @@
return framebufferIt->second;
}
+bool Context::isTextureGenerated(GLuint texture) const
+{
+ return mResourceManager->isTextureGenerated(texture);
+}
+
+bool Context::isBufferGenerated(GLuint buffer) const
+{
+ return mResourceManager->isBufferGenerated(buffer);
+}
+
+bool Context::isRenderbufferGenerated(GLuint renderbuffer) const
+{
+ return mResourceManager->isRenderbufferGenerated(renderbuffer);
+}
+
+bool Context::isFramebufferGenerated(GLuint framebuffer) const
+{
+ ASSERT(mFramebufferMap.find(0) != mFramebufferMap.end());
+ return mFramebufferMap.find(framebuffer) != mFramebufferMap.end();
+}
+
bool Context::isVertexArrayGenerated(GLuint vertexArray)
{
+ ASSERT(mVertexArrayMap.find(0) != mVertexArrayMap.end());
return mVertexArrayMap.find(vertexArray) != mVertexArrayMap.end();
}
bool Context::isTransformFeedbackGenerated(GLuint transformFeedback)
{
+ ASSERT(mTransformFeedbackMap.find(0) != mTransformFeedbackMap.end());
return mTransformFeedbackMap.find(transformFeedback) != mTransformFeedbackMap.end();
}
@@ -2376,6 +2405,7 @@
// Some extensions are always available because they are implemented in the GL layer.
mExtensions.bindUniformLocation = true;
mExtensions.vertexArrayObject = true;
+ mExtensions.bindGeneratesResource = true;
// Enable the no error extension if the context was created with the flag.
mExtensions.noError = mSkipValidation;