Vulkan: Minor cleanups to ProgramVk.

This moves the Pipeline Layout and related layout code init into the
LinkProgram implementation call. These resources don't depend on
anything other than the state at link time. Moving the init makes
the calling code a bit simpler since it doesn't need to process error
conditions and check for validity every time.

Also introduce a reset() method, similar to ProgramD3D. This will
allow us to re-link a program multiple times (once resource lifetime
management is properly implemented).

BUG=angleproject:2167

Change-Id: Ibe76ed9b901adf6b69b51ba8219b3ce79d55b87d
Reviewed-on: https://chromium-review.googlesource.com/720071
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
diff --git a/src/libANGLE/renderer/vulkan/ProgramVk.h b/src/libANGLE/renderer/vulkan/ProgramVk.h
index 5073acd..5d9b68c 100644
--- a/src/libANGLE/renderer/vulkan/ProgramVk.h
+++ b/src/libANGLE/renderer/vulkan/ProgramVk.h
@@ -110,9 +110,12 @@
 
     const vk::ShaderModule &getLinkedVertexModule() const;
     const vk::ShaderModule &getLinkedFragmentModule() const;
-    gl::ErrorOrResult<vk::PipelineLayout *> getPipelineLayout(VkDevice device);
+    const vk::PipelineLayout &getPipelineLayout() const;
 
   private:
+    void reset(VkDevice device);
+    vk::Error initPipelineLayout(ContextVk *context);
+
     vk::ShaderModule mLinkedVertexModule;
     vk::ShaderModule mLinkedFragmentModule;
     vk::PipelineLayout mPipelineLayout;