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/FramebufferVk.cpp b/src/libANGLE/renderer/vulkan/FramebufferVk.cpp
index 1bd9774..0ffe5b4 100644
--- a/src/libANGLE/renderer/vulkan/FramebufferVk.cpp
+++ b/src/libANGLE/renderer/vulkan/FramebufferVk.cpp
@@ -782,8 +782,15 @@
         // There is nothing to clear since the scissor is outside of the render area.
         return gl::NoError();
     }
+
     clearRect.rect = gl_vk::GetRect(intersection);
 
+    if (contextVk->isViewportFlipEnabled())
+    {
+        clearRect.rect.offset.y = getRenderPassRenderArea().height - clearRect.rect.offset.y -
+                                  clearRect.rect.extent.height;
+    }
+
     gl::AttachmentArray<VkClearAttachment> clearAttachments;
     int clearAttachmentIndex = 0;
 
@@ -889,7 +896,7 @@
     pipelineDesc.updateColorWriteMask(colorMaskFlags, getEmulatedAlphaAttachmentMask());
     pipelineDesc.updateRenderPassDesc(getRenderPassDesc());
     pipelineDesc.updateShaders(fullScreenQuad->queueSerial(), pushConstantColor->queueSerial());
-    pipelineDesc.updateViewport(renderArea, 0.0f, 1.0f, contextVk->isViewportFlipEnabled());
+    pipelineDesc.updateViewport(this, renderArea, 0.0f, 1.0f, contextVk->isViewportFlipEnabled());
 
     const gl::State &glState = contextVk->getGLState();
     if (glState.isScissorTestEnabled())