Vulkan: Fix how the viewport is calculated with Y flip

- This fixes all ViewportTest.* and MipmapTest.*
- Tests left to fix in end2end:
	- BlitFramebuffer*
	- MaxTextureSizeTest.*
	- PointSpritesTest.*

Every other test in angle_end2end_tests are working.

Bug: angleproject:2673
Change-Id: I162083bc847c15fa5490ab524ad4c22747d232ea
Reviewed-on: https://chromium-review.googlesource.com/1126333
Commit-Queue: Luc Ferron <lucferron@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/renderer/vulkan/ContextVk.cpp b/src/libANGLE/renderer/vulkan/ContextVk.cpp
index f8fecf4..7f6fe31 100644
--- a/src/libANGLE/renderer/vulkan/ContextVk.cpp
+++ b/src/libANGLE/renderer/vulkan/ContextVk.cpp
@@ -435,9 +435,13 @@
                 updateScissor(glState);
                 break;
             case gl::State::DIRTY_BIT_VIEWPORT:
-                mPipelineDesc->updateViewport(glState.getViewport(), glState.getNearPlane(),
-                                              glState.getFarPlane(), isViewportFlipEnabled());
+            {
+                FramebufferVk *framebufferVk = vk::GetImpl(glState.getDrawFramebuffer());
+                mPipelineDesc->updateViewport(framebufferVk, glState.getViewport(),
+                                              glState.getNearPlane(), glState.getFarPlane(),
+                                              isViewportFlipEnabled());
                 break;
+            }
             case gl::State::DIRTY_BIT_DEPTH_RANGE:
                 mPipelineDesc->updateDepthRange(glState.getNearPlane(), glState.getFarPlane());
                 break;
@@ -566,13 +570,17 @@
                 WARN() << "DIRTY_BIT_READ_FRAMEBUFFER_BINDING unimplemented";
                 break;
             case gl::State::DIRTY_BIT_DRAW_FRAMEBUFFER_BINDING:
-                mPipelineDesc->updateViewport(glState.getViewport(), glState.getNearPlane(),
-                                              glState.getFarPlane(), isViewportFlipEnabled());
+            {
+                FramebufferVk *framebufferVk = vk::GetImpl(glState.getDrawFramebuffer());
+                mPipelineDesc->updateViewport(framebufferVk, glState.getViewport(),
+                                              glState.getNearPlane(), glState.getFarPlane(),
+                                              isViewportFlipEnabled());
                 updateColorMask(glState.getBlendState());
                 mPipelineDesc->updateCullMode(glState.getRasterizerState(),
                                               isViewportFlipEnabled());
                 updateScissor(glState);
                 break;
+            }
             case gl::State::DIRTY_BIT_RENDERBUFFER_BINDING:
                 WARN() << "DIRTY_BIT_RENDERBUFFER_BINDING unimplemented";
                 break;