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/ProgramVk.cpp b/src/libANGLE/renderer/vulkan/ProgramVk.cpp
index d180b4a..b30d58a 100644
--- a/src/libANGLE/renderer/vulkan/ProgramVk.cpp
+++ b/src/libANGLE/renderer/vulkan/ProgramVk.cpp
@@ -26,17 +26,17 @@
 
 constexpr size_t kUniformBlockDynamicBufferMinSize = 256 * 128;
 
-gl::Error InitDefaultUniformBlock(const gl::Context *context,
-                                  gl::Shader *shader,
-                                  sh::BlockLayoutMap *blockLayoutMapOut,
-                                  size_t *blockSizeOut)
+void InitDefaultUniformBlock(const gl::Context *context,
+                             gl::Shader *shader,
+                             sh::BlockLayoutMap *blockLayoutMapOut,
+                             size_t *blockSizeOut)
 {
     const auto &uniforms = shader->getUniforms(context);
 
     if (uniforms.empty())
     {
         *blockSizeOut = 0;
-        return gl::NoError();
+        return;
     }
 
     sh::Std140BlockEncoder blockEncoder;
@@ -48,11 +48,11 @@
     if (blockSize == 0)
     {
         *blockSizeOut = 0;
-        return gl::NoError();
+        return;
     }
 
     *blockSizeOut = blockSize;
-    return gl::NoError();
+    return;
 }
 
 template <typename T>
@@ -113,22 +113,22 @@
     }
 }
 
-vk::Error SyncDefaultUniformBlock(RendererVk *renderer,
-                                  vk::DynamicBuffer *dynamicBuffer,
-                                  const angle::MemoryBuffer &bufferData,
-                                  uint32_t *outOffset,
-                                  bool *outBufferModified)
+angle::Result SyncDefaultUniformBlock(ContextVk *contextVk,
+                                      vk::DynamicBuffer *dynamicBuffer,
+                                      const angle::MemoryBuffer &bufferData,
+                                      uint32_t *outOffset,
+                                      bool *outBufferModified)
 {
     ASSERT(!bufferData.empty());
     uint8_t *data       = nullptr;
     VkBuffer *outBuffer = nullptr;
     uint32_t offset;
-    ANGLE_TRY(dynamicBuffer->allocate(renderer, bufferData.size(), &data, outBuffer, &offset,
+    ANGLE_TRY(dynamicBuffer->allocate(contextVk, bufferData.size(), &data, outBuffer, &offset,
                                       outBufferModified));
     *outOffset = offset;
     memcpy(data, bufferData.data(), bufferData.size());
-    ANGLE_TRY(dynamicBuffer->flush(renderer->getDevice()));
-    return vk::NoError();
+    ANGLE_TRY(dynamicBuffer->flush(contextVk));
+    return angle::Result::Continue();
 }
 }  // anonymous namespace
 
@@ -166,7 +166,7 @@
     return reset(contextVk);
 }
 
-vk::Error ProgramVk::reset(ContextVk *contextVk)
+angle::Result ProgramVk::reset(ContextVk *contextVk)
 {
     VkDevice device = contextVk->getDevice();
 
@@ -195,7 +195,7 @@
     mUsedDescriptorSetRange.invalidate();
     mDirtyTextures = false;
 
-    return vk::NoError();
+    return angle::Result::Continue();
 }
 
 gl::LinkResult ProgramVk::load(const gl::Context *contextImpl,
@@ -228,7 +228,6 @@
     ContextVk *contextVk           = vk::GetImpl(glContext);
     RendererVk *renderer           = contextVk->getRenderer();
     GlslangWrapper *glslangWrapper = renderer->getGlslangWrapper();
-    VkDevice device                = renderer->getDevice();
 
     ANGLE_TRY(reset(contextVk));
 
@@ -251,7 +250,7 @@
         vertexShaderInfo.codeSize = vertexCode.size() * sizeof(uint32_t);
         vertexShaderInfo.pCode    = vertexCode.data();
 
-        ANGLE_TRY(mLinkedVertexModule.init(device, vertexShaderInfo));
+        ANGLE_TRY(mLinkedVertexModule.init(contextVk, vertexShaderInfo));
         mVertexModuleSerial = renderer->issueShaderSerial();
     }
 
@@ -263,7 +262,7 @@
         fragmentShaderInfo.codeSize = fragmentCode.size() * sizeof(uint32_t);
         fragmentShaderInfo.pCode    = fragmentCode.data();
 
-        ANGLE_TRY(mLinkedFragmentModule.init(device, fragmentShaderInfo));
+        ANGLE_TRY(mLinkedFragmentModule.init(contextVk, fragmentShaderInfo));
         mFragmentModuleSerial = renderer->issueShaderSerial();
     }
 
@@ -285,7 +284,7 @@
                            1);
 
     ANGLE_TRY(renderer->getDescriptorSetLayout(
-        uniformsSetDesc, &mDescriptorSetLayouts[kUniformsDescriptorSetIndex]));
+        contextVk, uniformsSetDesc, &mDescriptorSetLayouts[kUniformsDescriptorSetIndex]));
 
     vk::DescriptorSetLayoutDesc texturesSetDesc;
 
@@ -299,13 +298,14 @@
         texturesSetDesc.update(textureIndex, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, count);
     }
 
-    ANGLE_TRY(renderer->getDescriptorSetLayout(texturesSetDesc,
+    ANGLE_TRY(renderer->getDescriptorSetLayout(contextVk, texturesSetDesc,
                                                &mDescriptorSetLayouts[kTextureDescriptorSetIndex]));
 
     vk::DescriptorSetLayoutDesc driverUniformsSetDesc;
     driverUniformsSetDesc.update(0, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1);
     ANGLE_TRY(renderer->getDescriptorSetLayout(
-        driverUniformsSetDesc, &mDescriptorSetLayouts[kDriverUniformsDescriptorSetIndex]));
+        contextVk, driverUniformsSetDesc,
+        &mDescriptorSetLayouts[kDriverUniformsDescriptorSetIndex]));
 
     vk::PipelineLayoutDesc pipelineLayoutDesc;
     pipelineLayoutDesc.updateDescriptorSetLayout(kUniformsDescriptorSetIndex, uniformsSetDesc);
@@ -313,8 +313,8 @@
     pipelineLayoutDesc.updateDescriptorSetLayout(kDriverUniformsDescriptorSetIndex,
                                                  driverUniformsSetDesc);
 
-    ANGLE_TRY(
-        renderer->getPipelineLayout(pipelineLayoutDesc, mDescriptorSetLayouts, &mPipelineLayout));
+    ANGLE_TRY(renderer->getPipelineLayout(contextVk, pipelineLayoutDesc, mDescriptorSetLayouts,
+                                          &mPipelineLayout));
 
     return true;
 }
@@ -323,7 +323,6 @@
 {
     ContextVk *contextVk = vk::GetImpl(glContext);
     RendererVk *renderer = contextVk->getRenderer();
-    VkDevice device      = contextVk->getDevice();
 
     // Process vertex and fragment uniforms into std140 packing.
     vk::ShaderMap<sh::BlockLayoutMap> layoutMap;
@@ -333,8 +332,8 @@
     for (vk::ShaderType shaderType : vk::AllShaderTypes())
     {
         gl::ShaderType glShaderType = static_cast<gl::ShaderType>(shaderType);
-        ANGLE_TRY(InitDefaultUniformBlock(glContext, mState.getAttachedShader(glShaderType),
-                                          &layoutMap[shaderType], &requiredBufferSize[shaderType]));
+        InitDefaultUniformBlock(glContext, mState.getAttachedShader(glShaderType),
+                                &layoutMap[shaderType], &requiredBufferSize[shaderType]);
     }
 
     // Init the default block layout info.
@@ -424,12 +423,12 @@
             uniformBufferInfo.queueFamilyIndexCount = 0;
             uniformBufferInfo.pQueueFamilyIndices   = nullptr;
 
-            ANGLE_TRY(mEmptyUniformBlockStorage.buffer.init(device, uniformBufferInfo));
+            ANGLE_TRY(mEmptyUniformBlockStorage.buffer.init(contextVk, uniformBufferInfo));
 
             // Assume host visible/coherent memory available.
             VkMemoryPropertyFlags flags =
                 (VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT);
-            ANGLE_TRY(AllocateBufferMemory(renderer, flags, &mEmptyUniformBlockStorage.buffer,
+            ANGLE_TRY(AllocateBufferMemory(contextVk, flags, &mEmptyUniformBlockStorage.buffer,
                                            &mEmptyUniformBlockStorage.memory));
         }
 
@@ -740,7 +739,7 @@
     return mFragmentModuleSerial;
 }
 
-vk::Error ProgramVk::allocateDescriptorSet(ContextVk *contextVk, uint32_t descriptorSetIndex)
+angle::Result ProgramVk::allocateDescriptorSet(ContextVk *contextVk, uint32_t descriptorSetIndex)
 {
     // Write out to a new a descriptor set.
     vk::DynamicDescriptorPool *dynamicDescriptorPool =
@@ -756,7 +755,7 @@
         mDescriptorSetLayouts[descriptorSetIndex].get();
     ANGLE_TRY(dynamicDescriptorPool->allocateSets(contextVk, descriptorSetLayout.ptr(), 1,
                                                   &mDescriptorSets[descriptorSetIndex]));
-    return vk::NoError();
+    return angle::Result::Continue();
 }
 
 void ProgramVk::getUniformfv(const gl::Context *context, GLint location, GLfloat *params) const
@@ -774,12 +773,12 @@
     UNIMPLEMENTED();
 }
 
-vk::Error ProgramVk::updateUniforms(ContextVk *contextVk)
+angle::Result ProgramVk::updateUniforms(ContextVk *contextVk)
 {
     if (!mDefaultUniformBlocks[vk::ShaderType::VertexShader].uniformsDirty &&
         !mDefaultUniformBlocks[vk::ShaderType::FragmentShader].uniformsDirty)
     {
-        return vk::NoError();
+        return angle::Result::Continue();
     }
 
     ASSERT(mUsedDescriptorSetRange.contains(0));
@@ -794,7 +793,7 @@
         if (uniformBlock.uniformsDirty)
         {
             bool bufferModified = false;
-            ANGLE_TRY(SyncDefaultUniformBlock(contextVk->getRenderer(), &uniformBlock.storage,
+            ANGLE_TRY(SyncDefaultUniformBlock(contextVk, &uniformBlock.storage,
                                               uniformBlock.uniformData,
                                               &mUniformBlocksOffsets[shaderType], &bufferModified));
             uniformBlock.uniformsDirty = false;
@@ -814,10 +813,10 @@
         ANGLE_TRY(updateDefaultUniformsDescriptorSet(contextVk));
     }
 
-    return vk::NoError();
+    return angle::Result::Continue();
 }
 
-vk::Error ProgramVk::updateDefaultUniformsDescriptorSet(ContextVk *contextVk)
+angle::Result ProgramVk::updateDefaultUniformsDescriptorSet(ContextVk *contextVk)
 {
     vk::ShaderMap<VkDescriptorBufferInfo> descriptorBufferInfo;
     vk::ShaderMap<VkWriteDescriptorSet> writeDescriptorInfo;
@@ -856,7 +855,7 @@
 
     vkUpdateDescriptorSets(device, 2, writeDescriptorInfo.data(), 0, nullptr);
 
-    return vk::NoError();
+    return angle::Result::Continue();
 }
 
 const std::vector<VkDescriptorSet> &ProgramVk::getDescriptorSets() const