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);