Implement buffer map related entry points and errors.

BUG=angle:565
Change-Id: I14cee4eec032d4b6b8d9479da4234b81e4ec6bec
Reviewed-on: https://chromium-review.googlesource.com/188202
Reviewed-by: Shannon Woods <shannonwoods@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libGLESv2/Context.cpp b/src/libGLESv2/Context.cpp
index f0b65cd..3199f95 100644
--- a/src/libGLESv2/Context.cpp
+++ b/src/libGLESv2/Context.cpp
@@ -1525,7 +1525,7 @@
     return mState.arrayBuffer.get();
 }
 
-Buffer *Context::getElementArrayBuffer()
+Buffer *Context::getElementArrayBuffer() const
 {
     return getCurrentVertexArray()->getElementArrayBuffer();
 }
@@ -4053,6 +4053,33 @@
     }
 }
 
+bool Context::hasMappedBuffer(GLenum target) const
+{
+    if (target == GL_ARRAY_BUFFER)
+    {
+        for (unsigned int attribIndex = 0; attribIndex < gl::MAX_VERTEX_ATTRIBS; attribIndex++)
+        {
+            const gl::VertexAttribute &vertexAttrib = getVertexAttribState(attribIndex);
+            gl::Buffer *boundBuffer = vertexAttrib.mBoundBuffer.get();
+            if (vertexAttrib.mArrayEnabled && boundBuffer && boundBuffer->mapped())
+            {
+                return true;
+            }
+        }
+    }
+    else if (target == GL_ELEMENT_ARRAY_BUFFER)
+    {
+        Buffer *elementBuffer = getElementArrayBuffer();
+        return (elementBuffer && elementBuffer->mapped());
+    }
+    else if (target == GL_TRANSFORM_FEEDBACK_BUFFER)
+    {
+        UNIMPLEMENTED();
+    }
+    else UNREACHABLE();
+    return false;
+}
+
 }
 
 extern "C"