Vulkan: Simplify viewport / scissor updates

Stop tying the viewport and the scissor together. Instead, we simply
use a very large (0->maxInt) scissor when scissor isn't enabled
and we use the clipped scissor to the renderArea size when its
enabled.

Bug: angleproject:2443

Change-Id: If7454793a050b1833c7d3166ea6b380192085c8f
Reviewed-on: https://chromium-review.googlesource.com/1006996
Commit-Queue: Luc Ferron <lucferron@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/renderer/vulkan/FramebufferVk.cpp b/src/libANGLE/renderer/vulkan/FramebufferVk.cpp
index ece646d..f31923d 100644
--- a/src/libANGLE/renderer/vulkan/FramebufferVk.cpp
+++ b/src/libANGLE/renderer/vulkan/FramebufferVk.cpp
@@ -507,7 +507,19 @@
     VkClearRect clearRect;
     clearRect.baseArrayLayer = 0;
     clearRect.layerCount     = 1;
-    clearRect.rect           = contextVk->getScissor();
+
+    // When clearing, the scissor region must be clipped to the renderArea per the validation rules
+    // in Vulkan.
+    gl::Rectangle intersection;
+    if (ClipRectangle(contextVk->getGLState().getScissor(), node->getRenderPassRenderArea(),
+                      &intersection))
+    {
+        clearRect.rect = gl_vk::GetRect(intersection);
+    }
+    else
+    {
+        clearRect.rect = gl_vk::GetRect(contextVk->getGLState().getScissor());
+    }
 
     commandBuffer->clearAttachments(static_cast<uint32_t>(clearAttachmentIndex),
                                     clearAttachments.data(), 1, &clearRect);