Vulkan: Use angle::Result error handling.

Introduces a vk::Context class to contain an error handler and Renderer
pointer. This abtracts the common code path for ContextVk + DisplayVk.

Removes vk::Error in favor of the POD angle::Result class. There are a
few remaining usages of gl::Error that will have to be cleaned up when
we can change the front-end APIs.

Bug: angleproject:2713

Change-Id: I5e68f223d595c6c561b59d6a85759e5738ed43c6
Reviewed-on: https://chromium-review.googlesource.com/1128924
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
diff --git a/src/libANGLE/renderer/vulkan/VertexArrayVk.cpp b/src/libANGLE/renderer/vulkan/VertexArrayVk.cpp
index dd329e9..de16276 100644
--- a/src/libANGLE/renderer/vulkan/VertexArrayVk.cpp
+++ b/src/libANGLE/renderer/vulkan/VertexArrayVk.cpp
@@ -69,9 +69,9 @@
     mLineLoopHelper.destroy(device);
 }
 
-gl::Error VertexArrayVk::streamVertexData(RendererVk *renderer,
-                                          const gl::AttributesMask &attribsToStream,
-                                          const gl::DrawCallParams &drawCallParams)
+angle::Result VertexArrayVk::streamVertexData(ContextVk *contextVk,
+                                              const gl::AttributesMask &attribsToStream,
+                                              const gl::DrawCallParams &drawCallParams)
 {
     ASSERT(!attribsToStream.none());
 
@@ -99,19 +99,19 @@
         uint8_t *dst    = nullptr;
         uint32_t offset = 0;
         ANGLE_TRY(mDynamicVertexData.allocate(
-            renderer, lastByte, &dst, &mCurrentArrayBufferHandles[attribIndex], &offset, nullptr));
+            contextVk, lastByte, &dst, &mCurrentArrayBufferHandles[attribIndex], &offset, nullptr));
         mCurrentArrayBufferOffsets[attribIndex] = static_cast<VkDeviceSize>(offset);
         memcpy(dst + firstByte, static_cast<const uint8_t *>(attrib.pointer) + firstByte,
                lastByte - firstByte);
     }
 
-    ANGLE_TRY(mDynamicVertexData.flush(renderer->getDevice()));
-    mDynamicVertexData.releaseRetainedBuffers(renderer);
-    return gl::NoError();
+    ANGLE_TRY(mDynamicVertexData.flush(contextVk));
+    mDynamicVertexData.releaseRetainedBuffers(contextVk->getRenderer());
+    return angle::Result::Continue();
 }
 
-gl::Error VertexArrayVk::streamIndexData(RendererVk *renderer,
-                                         const gl::DrawCallParams &drawCallParams)
+angle::Result VertexArrayVk::streamIndexData(ContextVk *contextVk,
+                                             const gl::DrawCallParams &drawCallParams)
 {
     ASSERT(!mState.getElementArrayBuffer().get());
 
@@ -120,7 +120,7 @@
     const GLsizei amount = sizeof(GLushort) * drawCallParams.indexCount();
     GLubyte *dst         = nullptr;
 
-    ANGLE_TRY(mDynamicIndexData.allocate(renderer, amount, &dst, &mCurrentElementArrayBufferHandle,
+    ANGLE_TRY(mDynamicIndexData.allocate(contextVk, amount, &dst, &mCurrentElementArrayBufferHandle,
                                          &offset, nullptr));
     if (drawCallParams.type() == GL_UNSIGNED_BYTE)
     {
@@ -137,10 +137,10 @@
     {
         memcpy(dst, drawCallParams.indices(), amount);
     }
-    ANGLE_TRY(mDynamicIndexData.flush(renderer->getDevice()));
-    mDynamicIndexData.releaseRetainedBuffers(renderer);
+    ANGLE_TRY(mDynamicIndexData.flush(contextVk));
+    mDynamicIndexData.releaseRetainedBuffers(contextVk->getRenderer());
     mCurrentElementArrayBufferOffset = offset;
-    return gl::NoError();
+    return angle::Result::Continue();
 }
 
 #define ANGLE_VERTEX_DIRTY_ATTRIB_FUNC(INDEX)                                          \
@@ -355,14 +355,15 @@
 }
 
 gl::Error VertexArrayVk::drawArrays(const gl::Context *context,
-                                    RendererVk *renderer,
                                     const gl::DrawCallParams &drawCallParams,
                                     vk::CommandBuffer *commandBuffer,
                                     bool newCommandBuffer)
 {
     ASSERT(commandBuffer->valid());
 
-    ANGLE_TRY(onDraw(context, renderer, drawCallParams, commandBuffer, newCommandBuffer));
+    ContextVk *contextVk = vk::GetImpl(context);
+
+    ANGLE_TRY(onDraw(context, drawCallParams, commandBuffer, newCommandBuffer));
 
     // Note: Vertex indexes can be arbitrarily large.
     uint32_t clampedVertexCount = drawCallParams.getClampedVertexCount<uint32_t>();
@@ -379,7 +380,7 @@
         mLineLoopBufferFirstIndex != drawCallParams.firstVertex() ||
         mLineLoopBufferLastIndex != lastVertex)
     {
-        ANGLE_TRY(mLineLoopHelper.getIndexBufferForDrawArrays(renderer, drawCallParams,
+        ANGLE_TRY(mLineLoopHelper.getIndexBufferForDrawArrays(contextVk, drawCallParams,
                                                               &mCurrentElementArrayBufferHandle,
                                                               &mCurrentElementArrayBufferOffset));
 
@@ -396,17 +397,17 @@
 }
 
 gl::Error VertexArrayVk::drawElements(const gl::Context *context,
-                                      RendererVk *renderer,
                                       const gl::DrawCallParams &drawCallParams,
                                       vk::CommandBuffer *commandBuffer,
                                       bool newCommandBuffer)
 {
     ASSERT(commandBuffer->valid());
 
+    ContextVk *contextVk = vk::GetImpl(context);
+
     if (drawCallParams.mode() != gl::PrimitiveMode::LineLoop)
     {
-        ANGLE_TRY(
-            onIndexedDraw(context, renderer, drawCallParams, commandBuffer, newCommandBuffer));
+        ANGLE_TRY(onIndexedDraw(context, drawCallParams, commandBuffer, newCommandBuffer));
         commandBuffer->drawIndexed(drawCallParams.indexCount(), 1, 0, 0, 0);
         return gl::NoError();
     }
@@ -420,7 +421,7 @@
         if (!elementArrayBuffer)
         {
             ANGLE_TRY(mLineLoopHelper.getIndexBufferForClientElementArray(
-                renderer, drawCallParams, &mCurrentElementArrayBufferHandle,
+                contextVk, drawCallParams, &mCurrentElementArrayBufferHandle,
                 &mCurrentElementArrayBufferOffset));
         }
         else
@@ -429,23 +430,23 @@
             intptr_t offset                = reinterpret_cast<intptr_t>(drawCallParams.indices());
             BufferVk *elementArrayBufferVk = vk::GetImpl(elementArrayBuffer);
             ANGLE_TRY(mLineLoopHelper.getIndexBufferForElementArrayBuffer(
-                renderer, elementArrayBufferVk, indexType, drawCallParams.indexCount(), offset,
+                contextVk, elementArrayBufferVk, indexType, drawCallParams.indexCount(), offset,
                 &mCurrentElementArrayBufferHandle, &mCurrentElementArrayBufferOffset));
         }
     }
 
-    ANGLE_TRY(onIndexedDraw(context, renderer, drawCallParams, commandBuffer, newCommandBuffer));
+    ANGLE_TRY(onIndexedDraw(context, drawCallParams, commandBuffer, newCommandBuffer));
     vk::LineLoopHelper::Draw(drawCallParams.indexCount(), commandBuffer);
 
     return gl::NoError();
 }
 
 gl::Error VertexArrayVk::onDraw(const gl::Context *context,
-                                RendererVk *renderer,
                                 const gl::DrawCallParams &drawCallParams,
                                 vk::CommandBuffer *commandBuffer,
                                 bool newCommandBuffer)
 {
+    ContextVk *contextVk                    = vk::GetImpl(context);
     const gl::State &state                  = context->getGLState();
     const gl::Program *programGL            = state.getProgram();
     const gl::AttributesMask &clientAttribs = mState.getEnabledClientMemoryAttribsMask();
@@ -458,7 +459,7 @@
         if (attribsToStream.any())
         {
             ANGLE_TRY(drawCallParams.ensureIndexRangeResolved(context));
-            ANGLE_TRY(streamVertexData(renderer, attribsToStream, drawCallParams));
+            ANGLE_TRY(streamVertexData(contextVk, attribsToStream, drawCallParams));
             commandBuffer->bindVertexBuffers(0, maxAttrib, mCurrentArrayBufferHandles.data(),
                                              mCurrentArrayBufferOffsets.data());
         }
@@ -472,7 +473,7 @@
 
             vk::CommandGraphResource *drawFramebuffer = vk::GetImpl(state.getDrawFramebuffer());
             updateArrayBufferReadDependencies(drawFramebuffer, activeAttribs,
-                                              renderer->getCurrentQueueSerial());
+                                              contextVk->getRenderer()->getCurrentQueueSerial());
         }
 
         mVertexBuffersDirty = false;
@@ -490,12 +491,12 @@
 }
 
 gl::Error VertexArrayVk::onIndexedDraw(const gl::Context *context,
-                                       RendererVk *renderer,
                                        const gl::DrawCallParams &drawCallParams,
                                        vk::CommandBuffer *commandBuffer,
                                        bool newCommandBuffer)
 {
-    ANGLE_TRY(onDraw(context, renderer, drawCallParams, commandBuffer, newCommandBuffer));
+    ContextVk *contextVk = vk::GetImpl(context);
+    ANGLE_TRY(onDraw(context, drawCallParams, commandBuffer, newCommandBuffer));
     bool isLineLoop  = drawCallParams.mode() == gl::PrimitiveMode::LineLoop;
     gl::Buffer *glBuffer = mState.getElementArrayBuffer().get();
     uintptr_t offset =
@@ -504,7 +505,7 @@
     if (!glBuffer && !isLineLoop)
     {
         ANGLE_TRY(drawCallParams.ensureIndexRangeResolved(context));
-        ANGLE_TRY(streamIndexData(renderer, drawCallParams));
+        ANGLE_TRY(streamIndexData(contextVk, drawCallParams));
         commandBuffer->bindIndexBuffer(mCurrentElementArrayBufferHandle,
                                        mCurrentElementArrayBufferOffset,
                                        gl_vk::GetIndexType(drawCallParams.type()));
@@ -519,7 +520,7 @@
             BufferVk *bufferVk   = vk::GetImpl(glBuffer);
             void *srcDataMapping = nullptr;
             ASSERT(!glBuffer->isMapped());
-            ANGLE_TRY(bufferVk->map(context, 0, &srcDataMapping));
+            ANGLE_TRY(bufferVk->mapImpl(contextVk, &srcDataMapping));
             uint8_t *srcData           = static_cast<uint8_t *>(srcDataMapping);
             intptr_t offsetIntoSrcData = reinterpret_cast<intptr_t>(drawCallParams.indices());
             srcData += offsetIntoSrcData;
@@ -530,7 +531,7 @@
             bool newBufferAllocated     = false;
             uint32_t expandedDataOffset = 0;
             ANGLE_TRY(mTranslatedByteIndexData.allocate(
-                renderer, static_cast<size_t>(bufferVk->getSize()) * 2, &allocatedData,
+                contextVk, static_cast<size_t>(bufferVk->getSize()) * 2, &allocatedData,
                 &mCurrentElementArrayBufferHandle, &expandedDataOffset, &newBufferAllocated));
             mCurrentElementArrayBufferOffset = static_cast<VkDeviceSize>(expandedDataOffset);
 
@@ -543,7 +544,7 @@
             }
 
             // Make sure our writes are available.
-            ANGLE_TRY(mTranslatedByteIndexData.flush(renderer->getDevice()));
+            ANGLE_TRY(mTranslatedByteIndexData.flush(contextVk));
             GLboolean result = false;
             ANGLE_TRY(bufferVk->unmap(context, &result));
 
@@ -564,7 +565,8 @@
 
         const gl::State &glState                  = context->getGLState();
         vk::CommandGraphResource *drawFramebuffer = vk::GetImpl(glState.getDrawFramebuffer());
-        updateElementArrayBufferReadDependency(drawFramebuffer, renderer->getCurrentQueueSerial());
+        updateElementArrayBufferReadDependency(drawFramebuffer,
+                                               contextVk->getRenderer()->getCurrentQueueSerial());
         mIndexBufferDirty = false;
 
         // If we've had a drawArrays call with a line loop before, we want to make sure this is